On Sun, 01 Aug 2010 13:01:32 +1200
Greg Ewing
While updating my yield-from impementation for Python 3.1.2, I came across a quirk in the way that the new exception chaining feature interacts with generators.
If you close() a generator, and it raises an exception inside a finally clause, you get a double-barrelled traceback that first reports a GeneratorExit, then "During handling of the above exception, another exception occurred", followed by the traceback for the exception raised by the generator.
It only happens if you call close() explicitly:
def g(): ... try: yield 1 ... finally: 1/0 ... gi = g() next(gi) 1 del gi Exception ZeroDivisionError: ZeroDivisionError('division by zero',) in
ignored gi = g() next(gi) 1 next(gi) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in g ZeroDivisionError: division by zero
Regards Antoine.