Guido van Rossum wrote:
> We considered this at some point during the PEP 340/343/346 discussion
> (in fact I had it this way in an early version of one of the PEPs),
> and in the end decided against it. I believe the argument was that any
> failure *before* __enter__() returns can be handled by try/except
> clauses inside __init__() or __enter__().
Hmm, you're right. Also, given implementation of PEP 343, code which
genuinely has to care about this can do so manually:
with async_exceptions_blocked():
with critical_resource():
with async_exceptions_unblocked():
# Do the real work
This ensures acquisition of the critical resource is not interrupted.
Even better, the above can be wrapped up in a template and still give
the desired guarantees:
@stmt_template
def safe_acquisition(resource):
with async_exceptions_blocked():
with resource():
with async_exceptions_unblocked():
yield None
with safe_acquisition(critical_resource):
# Do the real work
Cheers,
Nick.
--
Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia
---------------------------------------------------------------
http://boredomandlaziness.blogspot.com
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com