[Python-Dev] PEP 479 and asyncio

Chris Angelico rosuav at gmail.com
Fri Nov 28 10:27:53 CET 2014


On Fri, Nov 28, 2014 at 8:18 PM, Victor Stinner
<victor.stinner at gmail.com> wrote:
> 2014-11-28 10:12 GMT+01:00 Greg Ewing <greg.ewing at canterbury.ac.nz>:
>> I don't understand. If I'm interpreting PEP 479 correctly, in
>> 'x = yield from foo', a StopIteration raised by foo.__next__()
>> doesn't get turned into a RuntimeError
>
> The Trollius coroutine uses "raise Return(value)" which is basically a
> "raise StopIteraton(value)", and this is forbidden by the PEP 479.
> With the PEP 479, the StopIteration is replaced with a RuntimeError.

The question, I guess, is: Why can't it be translated into "return
value"? One answer is: Because that's not legal in Python 2.7. And I
can't respond to that answer, unfortunately. That's the one major
backward compat issue.

(Another answer may be "Because it would require changes to many
intermediate generators, not all of which are under our control". If
that's the issue, then it'll simply be a matter of telling people
"When you upgrade to Python 3.6, you will start to see warnings unless
you make this change".)

ChrisA


More information about the Python-Dev mailing list