Commit 304f9ff7 authored by Georg Brandl's avatar Georg Brandl

Clarify PEP 343 description.

parent 8eab424f
...@@ -640,15 +640,20 @@ with expression [as variable]: ...@@ -640,15 +640,20 @@ with expression [as variable]:
\end{verbatim} \end{verbatim}
The expression is evaluated, and it should result in an object that The expression is evaluated, and it should result in an object that
supports the context management protocol. This object may return a supports the context management protocol (that is, has \method{__enter__()}
value that can optionally be bound to the name \var{variable}. (Note and \method{__exit__()} methods.
carefully that \var{variable} is \emph{not} assigned the result of
\var{expression}.) The object can then run set-up code
before \var{with-block} is executed and some clean-up code
is executed after the block is done, even if the block raised an exception.
To enable the statement in Python 2.5, you need The object's \method{__enter__()} is called before \var{with-block} is
to add the following directive to your module: executed and therefore can run set-up code. It also may return a value
that is bound to the name \var{variable}, if given. (Note carefully
that \var{variable} is \emph{not} assigned the result of \var{expression}.)
After execution of the \var{with-block} is finished, the object's
\method{__exit__()} method is called, even if the block raised an exception,
and can therefore run clean-up code.
To enable the statement in Python 2.5, you need to add the following
directive to your module:
\begin{verbatim} \begin{verbatim}
from __future__ import with_statement from __future__ import with_statement
...@@ -668,9 +673,13 @@ with open('/etc/passwd', 'r') as f: ...@@ -668,9 +673,13 @@ with open('/etc/passwd', 'r') as f:
\end{verbatim} \end{verbatim}
After this statement has executed, the file object in \var{f} will After this statement has executed, the file object in \var{f} will
have been automatically closed, even if the 'for' loop have been automatically closed, even if the \keyword{for} loop
raised an exception part-way through the block. raised an exception part-way through the block.
\note{In this case, \var{f} is the same object created by
\function{open()}, because \method{file.__enter__()} returns
\var{self}.}
The \module{threading} module's locks and condition variables The \module{threading} module's locks and condition variables
also support the '\keyword{with}' statement: also support the '\keyword{with}' statement:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment