Nick Coghlan wrote:
I'd adjust the inner exception handlers to exploit the fact that SystemExit and GeneratorExit don't inherit from BaseException:
[...] except: # Covers SystemExit, GeneratorExit and # anything else that doesn't inherit # from Exception _m = getattr(_i, 'close', None) if _m is not None: _m() raise
This feels better to me too. Though it seems that _i.throw would be more appropriate than _i.close (except call _i.close is there is no _i.throw -- is it possible to have a close and not a throw?). I like the idea that "finally" (in try/finally) means finally and not "maybe finally" (which boils down to finally in CPython due to the reference counting collector, but maybe finally in Jython, IronPython or Pypy). -bruce frederiksen