Merged revisions 73286,73294,73296,73459,73462-73463,73544,73576-73577,73595-73596,73693-73694,73704-73705,73707,73713,73937-73940,73945,73951,73979 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r73286 | georg.brandl | 2009-06-08 09:57:35 +0200 (Mo, 08 Jun 2009) | 1 line
Remove period from end of headings.
........
r73294 | georg.brandl | 2009-06-08 15:34:52 +0200 (Mo, 08 Jun 2009) | 1 line
#6194: O_SHLOCK/O_EXLOCK are not really more platform independent than lockf().
........
r73296 | georg.brandl | 2009-06-08 18:03:41 +0200 (Mo, 08 Jun 2009) | 1 line
#6238: add fillchar to string.just function family.
........
r73459 | raymond.hettinger | 2009-06-17 03:43:47 +0200 (Mi, 17 Jun 2009) | 1 line
Add usage note.
........
r73462 | georg.brandl | 2009-06-17 11:36:21 +0200 (Mi, 17 Jun 2009) | 1 line
#6295: clarify blocking behavior of getch().
........
r73463 | georg.brandl | 2009-06-17 11:43:31 +0200 (Mi, 17 Jun 2009) | 1 line
#6255: document PyInt_FromSize_t.
........
r73544 | georg.brandl | 2009-06-24 08:41:19 +0200 (Mi, 24 Jun 2009) | 1 line
#6332: fix word dupes throughout the source.
........
r73576 | benjamin.peterson | 2009-06-27 01:37:06 +0200 (Sa, 27 Jun 2009) | 1 line
document is_declared_global()
........
r73577 | benjamin.peterson | 2009-06-27 16:16:23 +0200 (Sa, 27 Jun 2009) | 1 line
link to extensive generator docs in the reference manual
........
r73595 | ezio.melotti | 2009-06-28 01:45:39 +0200 (So, 28 Jun 2009) | 1 line
stmt and setup can contain multiple statements, see #5896
........
r73596 | ezio.melotti | 2009-06-28 02:07:45 +0200 (So, 28 Jun 2009) | 1 line
Fixed a wrong apostrophe
........
r73693 | jesse.noller | 2009-06-29 20:20:34 +0200 (Mo, 29 Jun 2009) | 1 line
Bug 5906: add a documentation note for unix daemons vs. multiprocessing daemons
........
r73694 | jesse.noller | 2009-06-29 20:24:26 +0200 (Mo, 29 Jun 2009) | 1 line
Issue 5740: multiprocessing.connection.* authkey fixes
........
r73704 | georg.brandl | 2009-06-30 18:15:43 +0200 (Di, 30 Jun 2009) | 1 line
#6376: fix copy-n-paste oversight.
........
r73705 | georg.brandl | 2009-06-30 18:17:28 +0200 (Di, 30 Jun 2009) | 1 line
#6374: add a bit of explanation about shell=True on Windows.
........
r73707 | georg.brandl | 2009-06-30 18:35:11 +0200 (Di, 30 Jun 2009) | 1 line
#6371: fix link targets.
........
r73713 | ezio.melotti | 2009-07-01 00:56:16 +0200 (Mi, 01 Jul 2009) | 1 line
Fixed a backslash that was not supposed to be there
........
r73937 | georg.brandl | 2009-07-11 12:12:36 +0200 (Sa, 11 Jul 2009) | 1 line
Fix style.
........
r73938 | georg.brandl | 2009-07-11 12:14:54 +0200 (Sa, 11 Jul 2009) | 1 line
#6446: fix import_spam() function to use correct error and reference handling.
........
r73939 | georg.brandl | 2009-07-11 12:18:10 +0200 (Sa, 11 Jul 2009) | 1 line
#6448: clarify docs for find_module().
........
r73940 | georg.brandl | 2009-07-11 12:37:38 +0200 (Sa, 11 Jul 2009) | 1 line
#6430: add note about size of "u" type.
........
r73945 | georg.brandl | 2009-07-11 12:51:31 +0200 (Sa, 11 Jul 2009) | 1 line
#6456: clarify the meaning of constants used as arguments to nl_langinfo().
........
r73951 | georg.brandl | 2009-07-11 16:23:38 +0200 (Sa, 11 Jul 2009) | 2 lines
array.array is actually a class.
........
r73979 | benjamin.peterson | 2009-07-12 18:56:54 +0200 (So, 12 Jul 2009) | 1 line
add versionadded
........
2009-10-27 11:29:22 -03:00
|
|
|
:mod:`contextlib` --- Utilities for :keyword:`with`\ -statement contexts
|
|
|
|
========================================================================
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
.. module:: contextlib
|
|
|
|
:synopsis: Utilities for with-statement contexts.
|
|
|
|
|
|
|
|
|
|
|
|
.. versionadded:: 2.5
|
|
|
|
|
|
|
|
This module provides utilities for common tasks involving the :keyword:`with`
|
|
|
|
statement. For more information see also :ref:`typecontextmanager` and
|
|
|
|
:ref:`context-managers`.
|
|
|
|
|
|
|
|
Functions provided:
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: contextmanager(func)
|
|
|
|
|
2007-12-02 10:58:50 -04:00
|
|
|
This function is a :term:`decorator` that can be used to define a factory
|
|
|
|
function for :keyword:`with` statement context managers, without needing to
|
|
|
|
create a class or separate :meth:`__enter__` and :meth:`__exit__` methods.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
A simple example (this is not recommended as a real way of generating HTML!)::
|
|
|
|
|
|
|
|
from contextlib import contextmanager
|
|
|
|
|
|
|
|
@contextmanager
|
|
|
|
def tag(name):
|
|
|
|
print "<%s>" % name
|
|
|
|
yield
|
|
|
|
print "</%s>" % name
|
|
|
|
|
|
|
|
>>> with tag("h1"):
|
|
|
|
... print "foo"
|
|
|
|
...
|
|
|
|
<h1>
|
|
|
|
foo
|
|
|
|
</h1>
|
|
|
|
|
2007-10-21 07:52:38 -03:00
|
|
|
The function being decorated must return a :term:`generator`-iterator when
|
|
|
|
called. This iterator must yield exactly one value, which will be bound to
|
|
|
|
the targets in the :keyword:`with` statement's :keyword:`as` clause, if any.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
At the point where the generator yields, the block nested in the :keyword:`with`
|
|
|
|
statement is executed. The generator is then resumed after the block is exited.
|
|
|
|
If an unhandled exception occurs in the block, it is reraised inside the
|
|
|
|
generator at the point where the yield occurred. Thus, you can use a
|
|
|
|
:keyword:`try`...\ :keyword:`except`...\ :keyword:`finally` statement to trap
|
|
|
|
the error (if any), or ensure that some cleanup takes place. If an exception is
|
|
|
|
trapped merely in order to log it or to perform some action (rather than to
|
|
|
|
suppress it entirely), the generator must reraise that exception. Otherwise the
|
|
|
|
generator context manager will indicate to the :keyword:`with` statement that
|
|
|
|
the exception has been handled, and execution will resume with the statement
|
|
|
|
immediately following the :keyword:`with` statement.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: nested(mgr1[, mgr2[, ...]])
|
|
|
|
|
|
|
|
Combine multiple context managers into a single nested context manager.
|
|
|
|
|
|
|
|
Code like this::
|
|
|
|
|
|
|
|
from contextlib import nested
|
|
|
|
|
Merged revisions 69578-69580,69901,69907,69994,70022-70023,70025-70026,70166,70273,70275,70342,70386-70387,70389-70390,70392-70393,70395,70397,70400,70418 via svnmerge
........
r69578 | georg.brandl | 2009-02-13 12:03:59 +0100 (Fr, 13 Feb 2009) | 1 line
#3694: add test for fix committed in r66693.
........
r69579 | georg.brandl | 2009-02-13 12:06:59 +0100 (Fr, 13 Feb 2009) | 2 lines
Fix warnings GCC emits where the argument of PyErr_Format is a single variable.
........
r69580 | georg.brandl | 2009-02-13 12:10:04 +0100 (Fr, 13 Feb 2009) | 2 lines
Fix warnings GCC emits where the argument of PyErr_Format is a single variable.
........
r69901 | georg.brandl | 2009-02-23 12:24:46 +0100 (Mo, 23 Feb 2009) | 2 lines
#5349: C++ pure virtuals can also have an implementation.
........
r69907 | georg.brandl | 2009-02-23 19:33:48 +0100 (Mo, 23 Feb 2009) | 1 line
Fix grammar.
........
r69994 | georg.brandl | 2009-02-26 18:36:26 +0100 (Do, 26 Feb 2009) | 1 line
Document that setting sys.py3kwarning wont do anything.
........
r70022 | georg.brandl | 2009-02-27 17:23:18 +0100 (Fr, 27 Feb 2009) | 1 line
#5361: fix typo.
........
r70023 | georg.brandl | 2009-02-27 17:39:26 +0100 (Fr, 27 Feb 2009) | 1 line
#5363: fix cmpfiles() docs. Another instance where a prose description is twice as long as the code.
........
r70025 | georg.brandl | 2009-02-27 17:52:55 +0100 (Fr, 27 Feb 2009) | 1 line
#5344: fix punctuation.
........
r70026 | georg.brandl | 2009-02-27 17:59:03 +0100 (Fr, 27 Feb 2009) | 1 line
#5365: add quick look conversion table for different time representations.
........
r70166 | georg.brandl | 2009-03-04 19:24:41 +0100 (Mi, 04 Mär 2009) | 2 lines
Remove obsolete stuff from string module docs.
........
r70273 | georg.brandl | 2009-03-09 15:25:07 +0100 (Mo, 09 Mär 2009) | 2 lines
#5458: add a note when we started to raise RuntimeErrors.
........
r70275 | georg.brandl | 2009-03-09 17:35:48 +0100 (Mo, 09 Mär 2009) | 2 lines
Add missing space.
........
r70342 | georg.brandl | 2009-03-13 20:03:58 +0100 (Fr, 13 Mär 2009) | 1 line
#5486: typos.
........
r70386 | georg.brandl | 2009-03-15 22:32:06 +0100 (So, 15 Mär 2009) | 1 line
#5496: fix docstring of lookup().
........
r70387 | georg.brandl | 2009-03-15 22:37:16 +0100 (So, 15 Mär 2009) | 1 line
#5493: clarify __nonzero__ docs.
........
r70389 | georg.brandl | 2009-03-15 22:43:38 +0100 (So, 15 Mär 2009) | 1 line
Fix a small nit in the error message if bool() falls back on __len__ and it returns the wrong type: it would tell the user that __nonzero__ should return bool or int.
........
r70390 | georg.brandl | 2009-03-15 22:44:43 +0100 (So, 15 Mär 2009) | 1 line
#5491: clarify nested() semantics.
........
r70392 | georg.brandl | 2009-03-15 22:46:00 +0100 (So, 15 Mär 2009) | 1 line
#5488: add missing struct member.
........
r70393 | georg.brandl | 2009-03-15 22:47:42 +0100 (So, 15 Mär 2009) | 1 line
#5478: fix copy-paste oversight in function signature.
........
r70395 | georg.brandl | 2009-03-15 22:51:48 +0100 (So, 15 Mär 2009) | 1 line
#5276: document IDLESTARTUP and .Idle.py.
........
r70397 | georg.brandl | 2009-03-15 22:53:56 +0100 (So, 15 Mär 2009) | 1 line
#5469: add with statement to list of name-binding constructs.
........
r70400 | georg.brandl | 2009-03-15 22:59:37 +0100 (So, 15 Mär 2009) | 3 lines
Fix markup in re docs and give a mail address in regex howto, so that
the recommendation to send suggestions to the author can be followed.
........
r70418 | georg.brandl | 2009-03-16 20:42:03 +0100 (Mo, 16 Mär 2009) | 1 line
Add token markup.
........
2009-04-05 18:48:06 -03:00
|
|
|
with nested(A(), B(), C()) as (X, Y, Z):
|
2007-08-15 11:28:01 -03:00
|
|
|
do_something()
|
|
|
|
|
|
|
|
is equivalent to this::
|
|
|
|
|
Merged revisions 69578-69580,69901,69907,69994,70022-70023,70025-70026,70166,70273,70275,70342,70386-70387,70389-70390,70392-70393,70395,70397,70400,70418 via svnmerge
........
r69578 | georg.brandl | 2009-02-13 12:03:59 +0100 (Fr, 13 Feb 2009) | 1 line
#3694: add test for fix committed in r66693.
........
r69579 | georg.brandl | 2009-02-13 12:06:59 +0100 (Fr, 13 Feb 2009) | 2 lines
Fix warnings GCC emits where the argument of PyErr_Format is a single variable.
........
r69580 | georg.brandl | 2009-02-13 12:10:04 +0100 (Fr, 13 Feb 2009) | 2 lines
Fix warnings GCC emits where the argument of PyErr_Format is a single variable.
........
r69901 | georg.brandl | 2009-02-23 12:24:46 +0100 (Mo, 23 Feb 2009) | 2 lines
#5349: C++ pure virtuals can also have an implementation.
........
r69907 | georg.brandl | 2009-02-23 19:33:48 +0100 (Mo, 23 Feb 2009) | 1 line
Fix grammar.
........
r69994 | georg.brandl | 2009-02-26 18:36:26 +0100 (Do, 26 Feb 2009) | 1 line
Document that setting sys.py3kwarning wont do anything.
........
r70022 | georg.brandl | 2009-02-27 17:23:18 +0100 (Fr, 27 Feb 2009) | 1 line
#5361: fix typo.
........
r70023 | georg.brandl | 2009-02-27 17:39:26 +0100 (Fr, 27 Feb 2009) | 1 line
#5363: fix cmpfiles() docs. Another instance where a prose description is twice as long as the code.
........
r70025 | georg.brandl | 2009-02-27 17:52:55 +0100 (Fr, 27 Feb 2009) | 1 line
#5344: fix punctuation.
........
r70026 | georg.brandl | 2009-02-27 17:59:03 +0100 (Fr, 27 Feb 2009) | 1 line
#5365: add quick look conversion table for different time representations.
........
r70166 | georg.brandl | 2009-03-04 19:24:41 +0100 (Mi, 04 Mär 2009) | 2 lines
Remove obsolete stuff from string module docs.
........
r70273 | georg.brandl | 2009-03-09 15:25:07 +0100 (Mo, 09 Mär 2009) | 2 lines
#5458: add a note when we started to raise RuntimeErrors.
........
r70275 | georg.brandl | 2009-03-09 17:35:48 +0100 (Mo, 09 Mär 2009) | 2 lines
Add missing space.
........
r70342 | georg.brandl | 2009-03-13 20:03:58 +0100 (Fr, 13 Mär 2009) | 1 line
#5486: typos.
........
r70386 | georg.brandl | 2009-03-15 22:32:06 +0100 (So, 15 Mär 2009) | 1 line
#5496: fix docstring of lookup().
........
r70387 | georg.brandl | 2009-03-15 22:37:16 +0100 (So, 15 Mär 2009) | 1 line
#5493: clarify __nonzero__ docs.
........
r70389 | georg.brandl | 2009-03-15 22:43:38 +0100 (So, 15 Mär 2009) | 1 line
Fix a small nit in the error message if bool() falls back on __len__ and it returns the wrong type: it would tell the user that __nonzero__ should return bool or int.
........
r70390 | georg.brandl | 2009-03-15 22:44:43 +0100 (So, 15 Mär 2009) | 1 line
#5491: clarify nested() semantics.
........
r70392 | georg.brandl | 2009-03-15 22:46:00 +0100 (So, 15 Mär 2009) | 1 line
#5488: add missing struct member.
........
r70393 | georg.brandl | 2009-03-15 22:47:42 +0100 (So, 15 Mär 2009) | 1 line
#5478: fix copy-paste oversight in function signature.
........
r70395 | georg.brandl | 2009-03-15 22:51:48 +0100 (So, 15 Mär 2009) | 1 line
#5276: document IDLESTARTUP and .Idle.py.
........
r70397 | georg.brandl | 2009-03-15 22:53:56 +0100 (So, 15 Mär 2009) | 1 line
#5469: add with statement to list of name-binding constructs.
........
r70400 | georg.brandl | 2009-03-15 22:59:37 +0100 (So, 15 Mär 2009) | 3 lines
Fix markup in re docs and give a mail address in regex howto, so that
the recommendation to send suggestions to the author can be followed.
........
r70418 | georg.brandl | 2009-03-16 20:42:03 +0100 (Mo, 16 Mär 2009) | 1 line
Add token markup.
........
2009-04-05 18:48:06 -03:00
|
|
|
m1, m2, m3 = A(), B(), C()
|
|
|
|
with m1 as X:
|
|
|
|
with m2 as Y:
|
|
|
|
with m3 as Z:
|
2007-08-15 11:28:01 -03:00
|
|
|
do_something()
|
|
|
|
|
|
|
|
Note that if the :meth:`__exit__` method of one of the nested context managers
|
|
|
|
indicates an exception should be suppressed, no exception information will be
|
|
|
|
passed to any remaining outer context managers. Similarly, if the
|
|
|
|
:meth:`__exit__` method of one of the nested managers raises an exception, any
|
|
|
|
previous exception state will be lost; the new exception will be passed to the
|
|
|
|
:meth:`__exit__` methods of any remaining outer context managers. In general,
|
|
|
|
:meth:`__exit__` methods should avoid raising exceptions, and in particular they
|
|
|
|
should not re-raise a passed-in exception.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: closing(thing)
|
|
|
|
|
|
|
|
Return a context manager that closes *thing* upon completion of the block. This
|
|
|
|
is basically equivalent to::
|
|
|
|
|
|
|
|
from contextlib import contextmanager
|
|
|
|
|
|
|
|
@contextmanager
|
|
|
|
def closing(thing):
|
|
|
|
try:
|
|
|
|
yield thing
|
|
|
|
finally:
|
|
|
|
thing.close()
|
|
|
|
|
|
|
|
And lets you write code like this::
|
|
|
|
|
|
|
|
from contextlib import closing
|
|
|
|
import urllib
|
|
|
|
|
|
|
|
with closing(urllib.urlopen('http://www.python.org')) as page:
|
|
|
|
for line in page:
|
|
|
|
print line
|
|
|
|
|
|
|
|
without needing to explicitly close ``page``. Even if an error occurs,
|
|
|
|
``page.close()`` will be called when the :keyword:`with` block is exited.
|
|
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
:pep:`0343` - The "with" statement
|
|
|
|
The specification, background, and examples for the Python :keyword:`with`
|
|
|
|
statement.
|
|
|
|
|