[Python-Dev] PEP 342 suggestion: start(), __call__() and unwind_call() methods
Nick Coghlan
ncoghlan at gmail.com
Fri Oct 7 14:43:07 CEST 2005
Nick Coghlan wrote:
> It ends up looking like this:
>
> def __call__(self, value=None):
> """ Call a generator as a coroutine
>
> Returns the first argument supplied to StopIteration or
> None if no argument was supplied.
> Raises ContinueIteration with the value yielded as the
> argument if the generator yields a value
> """
> if not self.__started:
> raise RuntimeError("Coroutine not started")
> try:
> if exc:
> yield_val = self.throw(value, *exc)
> else:
> yield_val = self.send(value)
> except (StopIteration), ex:
> if ex.args:
> return args[0]
> else:
> raise ContinueIteration(yield_val)
Oops, I didn't finish fixing this after I added unwind_call(). Try this
version instead:
def __call__(self, value=None):
""" Call a generator as a coroutine
Returns the first argument supplied to StopIteration or
None if no argument was supplied.
Raises ContinueIteration with the value yielded as the
argument if the generator yields a value
"""
try:
yield_val = self.send(value)
except (StopIteration), ex:
if ex.args:
return args[0]
else:
raise ContinueIteration(yield_val)
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://boredomandlaziness.blogspot.com
More information about the Python-Dev
mailing list