On Sunday, January 29, 2017 at 10:47:09 PM UTC-8, Chris Angelico wrote:
> On Mon, Jan 30, 2017 at 5:38 PM, <[email protected]> wrote:
> > On Sunday, January 29, 2017 at 9:54:44 PM UTC-8, Chris Angelico wrote:
> >> ...
> >> When you close() a generator, it raises GeneratorExit into it, and
> >> then silences any StopIteration or GeneratorExit that comes out of it.
> >
> > Chris,
> > Thanks for the info. Is this (GenExit silencing StopIteration) documented
> > somewhere?
> > I was suspecting this but couldn't find any reference.
>
> Actually..... think this might be incorrect. I didn't look in the
> docs, I looked in the source code, so my information is guaranteed
> accurate
I found PEP-342 describes this behavior - silencing other GenExit or
StopIteration.
BTW, the reason why I was checking this was to find a solution on how to get
return value from coroutine without relying on some sentinel value, something
like (not tested):
def accumulator():
sum = 0
try:
while True:
sum += yield
except GeneratorExit:
return sum
Any alternatives? Explicitly throwing GenExit looks like a hack.
--
https://mail.python.org/mailman/listinfo/python-list