[Python-Dev] PEP 463: Exception-catching expressions
Chris Angelico
rosuav at gmail.com
Fri Feb 21 16:12:04 CET 2014
On Sat, Feb 22, 2014 at 1:50 AM, Antoine Pitrou <solipsis at pitrou.net> wrote:
> On Sat, 22 Feb 2014 00:28:01 +1000
> Nick Coghlan <ncoghlan at gmail.com> wrote:
>>
>> Neither of these objections addresses the problems with the status quo, though:
>>
>> - the status quo encourages overbroad exception handling (as
>> illustrated by examples in the PEP)
>
> I don't get this. Using the proper exception class in a "try...except"
> suite is no more bothersome than using the proper exception class in
> this newly-proposed construct.
Overbroad exception handling comes in two ways. One is simply catching
Exception or BaseException when a narrower class would be better, and
that's not addressed by this PEP (except insofar as it does not have a
bare "except:" syntax, and so it forces you to at least be explicit
about catching BaseException). The other is this:
try:
f(x[i])
except IndexError:
f(default)
Translating that into this form:
f(x[i] except IndexError: default)
means that an IndexError thrown inside f() will not be caught. While
it is, of course, possible to write that currently:
try:
arg = x[i]
except IndexError:
arg = default
f(arg)
it's that much less readable, and as evidenced by several examples in
the standard library (some of which are in the PEP, and a few more can
be found in my associated collection [1]), it's common to short-cut
this. By providing a clean and convenient syntax for catching an
exception in just one small expression, we encourage the narrowing of
the catch front.
ChrisA
[1] https://github.com/Rosuav/ExceptExpr/blob/master/examples.py
More information about the Python-Dev
mailing list