[Python-Dev] Exception chaining and generator finalisation (original) (raw)
Greg Ewing greg.ewing at canterbury.ac.nz
Sun Aug 1 03:01:32 CEST 2010
- Previous message: [Python-Dev] No response to posts
- Next message: [Python-Dev] Exception chaining and generator finalisation
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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.
To my mind, the fact that GeneratorExit is involved is an implementation detail that shouldn't be leaking through like this.
Does anyone think this ought to be fixed, and if so, how? Should GeneratorExit be exempt from being implicitly set as the context of another exception? Should any other exceptions also be exempt?
Demonstration follows:
Python 3.1.2 (r312:79147, Jul 31 2010, 21:23:14) [GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin Type "help", "copyright", "credits" or "license" for more information.
def g(): ... try: ... yield 1 ... finally: ... raise ValueError("Spanish inquisition") ... gi = g() next(gi) 1 gi.close() Traceback (most recent call last): File "", line 3, in g GeneratorExit
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "", line 1, in File "", line 5, in g ValueError: Spanish inquisition
-- Greg
- Previous message: [Python-Dev] No response to posts
- Next message: [Python-Dev] Exception chaining and generator finalisation
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]