On Sunday, January 29, 2017 at 10:47:09 PM UTC-8, Chris Angelico wrote: > On Mon, Jan 30, 2017 at 5:38 PM, <inyeol....@gmail.com> 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