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 -- http://mail.python.org/mailman/listinfo/python-list