[Python-Dev] Exception chaining and generator finalisation (original) (raw)

Antoine Pitrou solipsis at pitrou.net
Sun Aug 1 05:46:46 CEST 2010


On Sun, 01 Aug 2010 13:01:32 +1200 Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:

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 <generator object g at 0x7fe50351ddc0> ignored gi = g() next(gi) 1 next(gi) Traceback (most recent call last): File "", line 1, in File "", line 3, in g ZeroDivisionError: division by zero

Regards

Antoine.



More information about the Python-Dev mailing list