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

Nikolaus Rath Nikolaus at rath.org
Sat Feb 22 21:29:23 CET 2014


"Stephen J. Turnbull" <stephen at xemacs.org> writes:
> Ethan Furman writes:
>  > On 02/21/2014 07:46 PM, Chris Angelico wrote:
>  > >
>  > > but not this:
>  > >
>  > > value = expr except Exception: default except Exception: default
>  > 
>  > This should be the way it works.  Nothing is gained in readability
>  > by turning a try with multiple except statements into an
>  > expression.
>
> Examples have been given several times.  In general, if 'expr' is a
> function call, it may well have a couple of different ways to fail
> which imply different default values.
>
>     interpolable = func(key) except TypeError: "not a string: %s" % key \
>                              except KeyError: "no such key: %s" % key
>     print("Some message that refers to '%s' % interpolable")
>
> versus
>
>     try:
>         interpolable = func(key)
>     except TypeError:
>         interpolable = "not a string: %s" % key
>     except KeyError:
>         interpolable = "no such key: %s" % key
>     print("Some message that refers to '%s' % interpolable")

I think the following suggestion from elsewhere in the thread would look
even better in this case:

     interpolable = func(key) except (TypeError: "not a string: %s" % key,
                                      KeyError: "no such key: %s" % key)
     print("Some message that refers to '%s' % interpolable")

     
It does not require the backslash, it is shorter, and it can still be
chained:

     interpolable = func(key) except (TypeError: "not a string: %s" % key,
                                      KeyError: defaults[key]
                                          except (KeyError: "no such key: %s" % key))
     print("Some message that refers to '%s' % interpolable")

Best,
-Nikolaus

-- 
Encrypted emails preferred.
PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6  02CF A9AD B7F8 AE4E 425C

             »Time flies like an arrow, fruit flies like a Banana.«


More information about the Python-Dev mailing list