mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Removed contextlib.nested()
This commit is contained in:
parent
6e5b0a1140
commit
9c4d0edd64
3 changed files with 0 additions and 216 deletions
|
@ -52,55 +52,6 @@ Functions provided:
|
|||
immediately following the :keyword:`with` statement.
|
||||
|
||||
|
||||
.. function:: nested(mgr1[, mgr2[, ...]])
|
||||
|
||||
Combine multiple context managers into a single nested context manager.
|
||||
|
||||
This function has been deprecated in favour of the multiple manager form
|
||||
of the :keyword:`with` statement.
|
||||
|
||||
The one advantage of this function over the multiple manager form of the
|
||||
:keyword:`with` statement is that argument unpacking allows it to be
|
||||
used with a variable number of context managers as follows::
|
||||
|
||||
from contextlib import nested
|
||||
|
||||
with nested(*managers):
|
||||
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.
|
||||
|
||||
This function has two major quirks that have led to it being deprecated. Firstly,
|
||||
as the context managers are all constructed before the function is invoked, the
|
||||
:meth:`__new__` and :meth:`__init__` methods of the inner context managers are
|
||||
not actually covered by the scope of the outer context managers. That means, for
|
||||
example, that using :func:`nested` to open two files is a programming error as the
|
||||
first file will not be closed promptly if an exception is thrown when opening
|
||||
the second file.
|
||||
|
||||
Secondly, if the :meth:`__enter__` method of one of the inner context managers
|
||||
raises an exception that is caught and suppressed by the :meth:`__exit__` method
|
||||
of one of the outer context managers, this construct will raise
|
||||
:exc:`RuntimeError` rather than skipping the body of the :keyword:`with`
|
||||
statement.
|
||||
|
||||
Developers that need to support nesting of a variable number of context managers
|
||||
can either use the :mod:`warnings` module to suppress the DeprecationWarning
|
||||
raised by this function or else use this function as a model for an application
|
||||
specific implementation.
|
||||
|
||||
.. deprecated:: 3.1
|
||||
The with-statement now supports this functionality directly (without the
|
||||
confusing error prone quirks).
|
||||
|
||||
|
||||
.. function:: closing(thing)
|
||||
|
||||
Return a context manager that closes *thing* upon completion of the block. This
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue