[Python-ideas] Cofunctions - Getting away from the iterator protocol

Terry Reedy tjreedy at udel.edu
Tue Nov 1 07:27:55 CET 2011


On 11/1/2011 12:58 AM, Ron Adam wrote:

> Poking around a bit, it looks like 'raise' does most of the work and the
> exception is just an envelope for what ever 'raise' puts in it.  Is that
> right?

I believe raise just instantiates the indicated exception. I expect that 
Exception.__new__ or .__init__ captures the traceback info. Subclasses 
can add more. A SuspendExecution exception should be able to grab as 
much as is needed for a resume. A CAPI call could be added if needed.

I hope you keep looking at this idea. Function calls stop execution and 
pass control 'down', to be resumed by return. yield stops execution and 
passes control 'up', to be resumed by next (or .send). Exceptions pass 
control 'up' (or 'out') without the possibility of resuming. All that is 
lacking is something to suspend and pass control 'sideways', to a 
specific target. A special exception makes some sense in that exceptions 
already get the call stack needed to resume after suspension.

-- 
Terry Jan Reedy




More information about the Python-ideas mailing list