[Python-ideas] Possible PEP 380 tweak

Ron Adam rrr at ronadam.com
Wed Oct 27 17:01:00 CEST 2010



On 10/25/2010 10:25 PM, Guido van Rossum wrote:
> By the way, here's how to emulate the value-returning-close() on a
> generator, assuming the generator uses raise StopIteration(x) to mean
> return x:
>
> def gclose(gen):
>    try:
>      gen.throw(GeneratorExit)
>    except StopIteration, err:
>      if err.args:
>        return err.args[0]
>    except GeneratorExit:
>      pass
>    return None
>
> I like this because it's fairly straightforward (except for the detail
> of having to also catch GeneratorExit).
>
> In fact it would be a really simple change to gen_close() in
> genobject.c -- the only change needed there would be to return
> err.args[0]. I like small evolutionary improvements to APIs.

Here's an interesting idea...

It looks like a common case for consumer co-functions is they need to be 
started and then closed, so I'm wondering if we can make these work context 
managers?  That may be a way to reduce the need for the try/except blocks 
inside the generators.

     with my_cofunction(args) as c:
        ... use c

Regards,
   Ron




More information about the Python-ideas mailing list