except clause syntax question
Mel Wilson
mwilson at the-wire.com
Tue Jan 31 08:24:27 EST 2012
Charles Yeomans wrote:
> To catch more than one exception type in an except block, one writes
>
> except (A, B, C) as e:
>
> I'm wondering why it was decided to match tuples, but not lists:
>
> except [A, B, C] as e:
>
> The latter makes more sense semantically to me -- "catch all exception
> types in a list" as opposed to "catch this single thing composed of three
> exception types".
On reflection, it seems to hint at a style that Python extensions were made
in. (IIRC) the first operand in an `except` statement was originally just
an arbitrary marker to identify the exception. Unique string values were
customary, although the Python library defined things with standard
exception names. Using a string means that general exceptions weren't to be
collected in general sequences; `except "Serious Error"` was never meant to
catch `raise "r"`. If only tuples were used for collections, it would
create havoc for fewer of any weirdos who had used strange markers of their
own devising.
It looks like tuples were chosen as the most "lightweight", or maybe least
intrusive, sequence type to require to denote a collection of exceptions.
You see a similar decision, with the opposite emphasis, with the string
modulo operator. The second operand is supposed to be a tuple, but if the
template string needs only one value, then the rules are relaxed and any
single non-tuple value is used as-is.
Mel.
More information about the Python-list
mailing list