[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