except clause syntax question
Charles Yeomans
charles at declareSub.com
Tue Jan 31 13:04:22 EST 2012
On Jan 31, 2012, at 8:24 AM, Mel Wilson wrote:
> 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.
>
Compatilbility; that makes sense. I came to python well after strings were used for exceptions. Thanks.
Charles Yeomans
More information about the Python-list
mailing list