[Python-Dev] cpython: Rename contextlib.ignored() to contextlib.ignore(). (original) (raw)

Stephen J. Turnbull stephen at xemacs.org
Sat Oct 12 04:47:57 CEST 2013


Nick Coghlan writes:

(RDM is also right that the exception still has the effect of terminating the block early, but I view names as mnemonics rather than necessarily 100% accurate descriptions of things).

This is just way too ambiguous for my taste. I can't help reading

with contextlib.ignore(ExceptionIDontFeelLikeHandlingProperly):
    stmt1
    stmt2
    stmt3

as

try:
    stmt1
except ExceptionIDontFeelLikeHandlingProperly:
    pass
try:
    stmt2
except ExceptionIDontFeelLikeHandlingProperly:
    pass
try:
    stmt3
except ExceptionIDontFeelLikeHandlingProperly:
    pass

rather than

try:
    stmt1
    stmt2
    stmt3
except ExceptionIDontFeelLikeHandlingProperly:
    pass

It just feels like the exception should be suppressed at some level "lower" than stmtN, so stmtN fails but the suite continues. How about

with contextlib.break_on(ExceptionIDontFeelLikeHandlingProperly):
    stmt1
    stmt2
    stmt3

This is not 100% accurate Pythonically (there's no loop to break here), but it does describe what the context manager does more accurately, and it does effectively break out of the 'with' control structure.



More information about the Python-Dev mailing list