[Python-ideas] Yield-From: Finalization guarantees

Nick Coghlan ncoghlan at gmail.com
Mon Mar 30 12:47:00 CEST 2009

Greg Ewing wrote:
> I'm inclined to think this situation is a symptom that
> the idea of being able to catch GeneratorExit at all
> is flawed. If generator finalization were implemented
> by means of a forced return, or something equally
> uncatchable, instead of an exception, we wouldn't have
> so much of a problem.

Well, in theory people are meant to be writing "except Exception:"
rather than using a bare except or catching BaseException - that's a big
part of the reason SystemExit, KeyboardInterrupt and GeneratorExit
*aren't* Exception subclasses.

> Related to that, I'm starting to come back to my
> original instinct that GeneratorExit should not be
> thrown into the subiterator at all. Rather, it should
> be taken as an indication that the delegating generator
> is being finalized, and the subiterator's close()
> method called if it has one. Then there's never any
> question about whether to re-raise it -- we should
> always do so.

I think that's a simpler finalisation rule to remember, so I'd be fine
with that approach. I don't think we're going to be able to completely
eliminate the tricky subtleties from this expression, but we can at
least try to keep them as simple as possible.


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia

More information about the Python-ideas mailing list