[Python-Dev] Re: anonymous blocks
Phillip J. Eby
pje at telecommunity.com
Mon Apr 25 05:57:37 CEST 2005
At 11:39 PM 4/24/05 -0400, Bob Ippolito wrote:
>On Apr 24, 2005, at 11:32 PM, Phillip J. Eby wrote:
>
>>At 04:57 PM 4/24/05 -0700, Guido van Rossum wrote:
>>>So a block could return a value to the generator using a return
>>>statement; the generator can catch this by catching ReturnFlow.
>>>(Syntactic sugar could be "VAR = yield ..." like in Ruby.)
>>
>>[uncontrolled drooling, followed by much rejoicing]
>>
>>If this were available to generators in general, you could untwist
>>Twisted. I'm basically simulating this sort of exception/value passing
>>in peak.events to do exactly that, except I have to do:
>>
>> yield somethingBlocking(); result=events.resume()
>>
>>where events.resume() magically receives a value or exception from
>>outside the generator and either returns or raises it. If
>>next()-with-argument and next_ex() are available normally on generators,
>>this would allow you to simulate co-routines without the events.resume()
>>magic; the above would simply read:
>>
>> result = yield somethingBlocking()
>>
>>The rest of the peak.events coroutine simulation would remain around to
>>manage the generator stack and scheduling, but the syntax would be
>>cleaner and the operation of it entirely unmagical.
>
>Only if "result = yield somethingBlocking()" could also raise an exception.
Read Guido's post again; he proposed that passing a result would occur by
raising a ReturnFlow exception! In other words, it's the result passing
that's the exceptional exception, while returning an exception is
unexceptional. :)
More information about the Python-Dev
mailing list