COMMENT: This page describes a simplified design. See python-dev for the discussion.
New in version 2.5.
The with statement is used to wrap the execution of a block with methods defined by a context guard (see context-managers). This allows common try-except-finally usage patterns to be encapsulated for convenient reuse.
Syntax:
with expression [as target list] :
suite
The expression is evaluated once, and should yield a context guard, which is used to control execution of the suite. The guard object can provide execution-specific data, which is assigned to the target list, if present.
Here's a more detailed description:
If the suite was exited due to an exception, and the return value from the __exit__ method was false, the exception is reraised. If the return value was true, the exception is suppressed, and execution continues with the statement following the with statement.
If the suite was exited for any reason other than an exception, the return value from __exit__ is ignored, and execution proceeds at the normal location for the kind of exit that was taken.
Note: The with statement guarantees that if the __enter__ method returns without an error, then __exit__ will always be called. Thus, if an error occurs during the assignment to the target list, it will be treated the same as an error occurring within the suite would be. See step 5 above.
Note: In Python 2.5, the with statement is only allowed when the with_statement feature has been enabled. It will always be enabled in Python 2.6. This __future__ import statement can be used to enable the feature (see future):
from __future__ import with_statement
See Also: PEP 0343, The "with" statement The specification, background, and examples for the Python with statement.