Consider the following:
with open(path, mode) as f:
return [line for line in f if condition]
Yes, it acts like the
finally block after a
try block, i.e. it always executes (unless the python process terminates in an unusual way of course).
It is also mentioned in one of the examples of PEP-343 which is the specification for the
with locked(myLock): # Code here executes with myLock held. The lock is # guaranteed to be released when the block is left (even # if via return or by an uncaught exception).
Something worth mentioning is however, that you cannot easily catch exceptions thrown by the
open() call without putting the whole
with block inside a
try..except block which is usually not what one wants.