Цепная динамическая итерация контекстных менеджеров к одному с оператором

У меня есть куча контекстных менеджеров, которых я хочу связать. На первый взглядcontextlib.nested выглядело как подходящее решение. Однако этот метод помечен как устаревший в документации, в которой также говорится, что последнийwith Заявление позволяет это напрямую:

Устаревший с версии 2.7: оператор with теперь поддерживает эту функцию напрямую (без запутанных ошибок, склонных к ошибкам).

Однако я не мог заставить Python 3.4.3 использовать динамический итеративный из контекстных менеджеров:

class Foo():
    def __enter__(self):
        print('entering:', self.name)
        return self
    def __exit__(self, *_):
        pass
    def __init__(self, name):
        self.name = name

foo = Foo('foo')
bar = Foo('bar')

будь цепочкой:

from itertools import chain
m = chain([foo], [bar])
with m:
     pass

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: __exit__
m = [foo, bar]

предоставление списка напрямую:

with m:
     pass

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: __exit__

или распаковка:

with (*m):
    pass

  File "<stdin>", line 1
SyntaxError: can use starred expression only as assignment target

Итак, как правильно связать динамическое количество контекстных менеджеров вwith Скажите правильно?

Ответы на вопрос(2)

Ваш ответ на вопрос