[Python-Dev] __exit__ API?

Nick Coghlan ncoghlan at gmail.com
Sat Mar 4 10:46:56 CET 2006


Guido van Rossum wrote:
> A few days ago there were rumbling noises that requiring __exit__ to
> re-raise the exception (as I amended PEP 343 at the time) could lead
> to easily-missed bugs in __exit__ handlers.
> 
> After thinking it over I think I agree and I think I'd like to change
> the API so that the exception is only ignored if __exit__ returns a
> "true" value.
> 
> The easiest implementation is probably to just let the WITH_CLEANUP
> opcode do everything. This becomes a rather heavy opcode then but the
> alternative is to generate very hairy code (like the original patch
> did, full of ROT 4 choruses).
> 
> Any objections? I probably won't get to this until Monday.

Sounds good to me - I believe the majority of explicit __exit__ handlers will 
be of a try/finally nature rather than try/except, and that situations where 
the exception is going to be suppressed are better handled using @contextmanager.

The solution you propose means that __exit__ methods *can* suppress exceptions 
if they want to, but their default behaviour will still do the right thing.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org


More information about the Python-Dev mailing list