Альтернатива contextlib.nested с переменным количеством контекстных менеджеров
У нас есть код, который вызывает переменное количество контекстных менеджеров в зависимости от параметров времени выполнения:
from contextlib import nested, contextmanager
@contextmanager
def my_context(arg):
print("entering", arg)
try:
yield arg
finally:
print("exiting", arg)
def my_fn(items):
with nested(*(my_context(arg) for arg in items)) as managers:
print("processing under", managers)
my_fn(range(3))
Тем не мение,contextlib.nested
устарела с Python 2.7:
DeprecationWarning: With-statements now directly support multiple context managers
Ответы наНесколько переменных в Python 'с' заявление показывают, чтоcontextlib.nested
есть некоторыенепонятные причудливые причуды, но предложенная альтернатива использования нескольких менеджеровwith
заявление выиграл• работает с переменным количеством менеджеров контекста (а также нарушает обратную совместимость).
Есть ли альтернативыcontextlib.nested
которые нене рекомендуется и (предпочтительно) нете же ошибки?
Или я должен продолжать использоватьcontextlib.nested
и игнорировать предупреждение? Если так, я должен планироватьcontextlib.nested
быть удаленным в будущем?