[Python-Dev] Re: anonymous blocks

Bob Ippolito bob at redivi.com
Mon Apr 25 06:08:02 CEST 2005

On Apr 24, 2005, at 11:57 PM, Phillip J. Eby wrote:

> 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.  :)

Oh, right.  Too much cold medicine tonight I guess :)

You're right, of course.  This facility would be VERY nice to ab^Wuse 
when writing any event driven software.. not just Twisted.


More information about the Python-Dev mailing list