On Sun, Aug 1, 2010 at 11:01 AM, Greg Ewing <greg.ew...@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.
>
> 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?

I don't see it as an implementation detail - it's part of the spec of
generator finalisation in PEP 342 that GeneratorExit is thrown in to
the incomplete generator at the point of the most recent yield. Trying
to hide that doesn't benefit anybody.

SystemExit and KeyboardInterrupt behave the same way:

Python 3.2a0 (py3k:82729, Jul  9 2010, 20:26:08)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> try:
...   sys.exit(1)
... finally:
...   raise RuntimeError("Ooops")
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
SystemExit: 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
RuntimeError: Ooops

>>> try:
...   input("Hit Ctrl-C now")
... finally:
...   raise RuntimeError("Ooops")
...
Hit Ctrl-C nowTraceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
RuntimeError: Ooops


Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to