I have a bunch of context managers that I want to chain. On the first glance, contextlib.nested
looked like a fitting solution. However, this method is flagged as d
The "multiple manager form of the with
statement", as shown in the statement's documentation, would be:
with foo, bar:
i.e. it doesn't support a dynamic number of managers. As the documentation for contextlib.nested notes:
Developers that need to support nesting of a variable number of context managers can either use the
warnings
module to suppress theDeprecationWarning
raised by this function or else use this function as a model for an application specific implementation.
You misunderstood that line. The with
statement takes more than one context manager, separated by commas, but not an iterable:
with foo, bar:
works.
Use a contextlib.ExitStack() object if you need to support a dynamic set of context managers:
from contextlib import ExitStack
with ExitStack() as stack:
for cm in (foo, bar):
stack.enter_context(cm)