[Python-Dev] SF #1462485 - StopIteration raised in body of 'with' statement suppressed

Guido van Rossum guido at python.org
Mon Apr 3 17:41:43 CEST 2006


On 4/2/06, Delaney, Timothy (Tim) <tdelaney at avaya.com> wrote:
> Given:
>> @contextmanager
> def gen():
> print '__enter__'
> yield
> print '__exit__'
>> with gen():
> raise StopIteration('body')
>> I would expect to get the StopIteration exception raised. Instead it's
> suppressed by the @contextmanager decorator.

Right. I'm not sure how to fix this (but I think Phillip probably can).
> I think we should only suppress the exception if it's *not* the
> exception passed into gen.throw() i.e. it's raised by the generator.
> Does this sound like the correct behaviour? I've attached tests and a
> fix implementing this to the bug report.

Cool.
> I can't confirm right now (at work, need to install 2.5) but I'm also
> wondering what will happen if KeyboardInterrupt or SystemExit is raised
> from inside the generator when it's being closed via __exit__. I suspect
> a RuntimeError will be raised, whereas I think these should pass
> through.

I see no reason for this with the current code. Perhaps a previous
version of contextlib.py had this problem?
--
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /