[Python-Dev] PEP 463: Exception-catching expressions

Nick Coghlan ncoghlan at gmail.com
Fri Feb 21 14:53:46 CET 2014


On 21 February 2014 22:42, Chris Angelico <rosuav at gmail.com> wrote:
> People can already write:
>
> if (x if y else z):
>
> without the parens, and it works. Readability suffers when the same
> keyword is used twice (here "if" rather than the colon, but same
> difference), yet the parens are considered optional. Python is a
> language that, by and large, lacks syntactic salt; style guides are
> free to stipulate more, but the language doesn't make demands. I would
> strongly *recommend* using parens in all the cases you've shown,
> especially lambda:
>
>>    lambda x: calculate(x) except Exception: None
>>    lambda x: (calculate(x) except Exception: None)
>
> as it would otherwise depend on operator precedence; but mandating
> them feels to me like demanding readability.

Right, that's why my main motivation for this suggestion is the one
relating to keeping future options open. If the parentheses are
optional, than adding multiple except clauses latter isn't possible,
since this would already be valid, but mean something different:

    expr except Exception1: default1 except Exception2: default2

The deferral currently has this snippet:

"""In order to ensure compatibility with future versions, ensure that
any consecutive except operators are parenthesized to guarantee the
interpretation you expect."""

That's not a reasonable expectation - either the parentheses have to
be mandatory as part of the deferral, or else multiple except clause
support needs to be listed as rejected rather than deferred.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia


More information about the Python-Dev mailing list