[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