On Feb 13, 2014, at 11:04, Nathan Schneider <nathan@cmu.edu> wrote:

On Thu, Feb 13, 2014 at 1:47 PM, spir <denis.spir@gmail.com> wrote:
On 02/13/2014 07:43 PM, Amber Yust wrote:
Actually. What if we just reused 'try'?

     foo = bar() except BazException try 'qux'

This also leads naturally to chaining multiple possible fallbacks:

     foo = bar() except BarException try baz() except BazException try None

I like it. Especially because 'try' already works with 'except'. (But note that 'try', like my proposal of 'then', normally introduces a block).


This strikes me as counterintuitive because it is inconsistent: 'bar()' is being tried, but does not follow 'try', while the others do. And then the 'try None' has no corresponding 'except'.

Suggestion: an expression like

    foo = (try bar() except BarException)

that defaults to None if the exception is caught. This could then be chained with 'or':

    foo = (try bar() except BarException) or (try baz() except BazException)

But what if bar() can successfully return None, or just a falsey value in general?

Note that this is exactly the reason we needed the if expression: because or is tempting but incorrect in such cases.


as distinguished from

    foo = (try bar() except BarException) or baz()

which does not do any exception handling for baz().

(Apologies if something like this has been proposed above; I could not find it from skimming the thread.)

Nathan
 

d
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/