Jacob Holm wrote:
in most cases this will be code that is breaking the rule about not catching KeyboardInterrupt and SystemExit.
Not necessarily, it could be doing except GeneratorExit: return
If you use such a generator in a yield-from expression, you will get a RuntimeError('generator ignored GeneratorExit') on close, telling you that something is wrong.
But it won't be at all clear *what* is wrong or what to do about it. The caller is making a perfectly ordinary yield-from call, and he's calling what looks to all the world like a perfectly well-behaved iterator. Where's the mistake? Remember that the generator being called may have been written by someone else. The caller may not know anything about its internals or be in a position to fix them if he did.
I think that getting a RuntimeError on close is sufficient indication that such a generator should not be used in yield-from.
But it's a perfectly valid generator by current standards. I don't want to declare some existing class of generators as being second-class citizens with respect to yield-from, especially based on some internal implementation detail unknowable to its caller. -- Greg