[Python-ideas] Revised**12 PEP on Yield-From

Jacob Holm jh at improva.dk
Thu Apr 23 02:20:20 CEST 2009


Hi Jim

Jim Pryor wrote:
>>> I would call that a bug.
>> I agree with that.
> 
> I don't understand why you're both counting this as a bug. It looks like
> exactly the behavior specified in PEP 342. When g.close() is evaluated,
> a GeneratorExit is thrown to the suspended 'yield' expression in foo.
> That exception is is not caught, so g terminates without executing the
> rest of its code. The 'raise ValueError' line is never executed.
> 


You are of course completely right.  What I *should* have tried was the 
following:

 >>> def foo():
...     try:
...         yield 'bar'
...     except:
...         raise ValueError('baz')
...
 >>> g = foo()
 >>> g.next()
'bar'
 >>> g.close()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "<stdin>", line 5, in foo
ValueError: baz


Which works as expected.  No bug in sight.  In that case I am not sure 
what Eriks original problem was.

Cheers
- Jacob



More information about the Python-ideas mailing list