从v3.1和 Python 2.7开始,在Python 3中是可能的。新with语法支持多个上下文管理器:
with A() as a, B() as b, C() as c:
doSomething(a,b,c)
不同于contextlib.nested
,这保证了即使或方法引发异常,a
也b
将__exit__()
调用C()
的__enter__()
。
您也可以在较新的定义中使用较早的变量(以下为h / t Ahmad):
with A() as a, B(a) as b, C(a, b) as c:
doSomething(a, c)