Ian Kelly <ian.g.ke...@gmail.com> wrote: > t = (type, value, traceback) > raise t > > That it accepts the tuple and raises a value-less expression of type > `type` surprises me. The docs don't say anything about this, and I > would have expected a TypeError, but it appears to be extracting the > first element of the tuple and using that as the value of the first > expression. > Not only that but you can nest tuples and it will drill down as far as necessary through the tuples until it finds something that isn't a tuple.
It doesn't appear to be documented, but I think it may be intended to provide some kind of symmetry with 'try...except': when you catch an exception the expression used to catch the exception must be 'compatible' with the exception, i.e. the exception itself, one of its base classes, or a tuple which contains an item 'compatible' with the exception. So my guess would be that since it allows: MyExceptionSpec = (RuntimeError, ValueError) try: ... except MyExceptionSpec: ... the intent is to allow you to also throw 'MyExceptionSpec' from within the 'try'. I would also guess that it is a hangover from the days when exceptions were strings and you couldn't use inheritance to group exceptions. -- Duncan Booth http://kupuguy.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list