【发布时间】:2018-11-15 22:53:08
【问题描述】:
在 Python3 中,我们可以在 with 语句中使用多个上下文。但是,如果不能在 with 语句中立即构造它们,是否可以输入多个上下文?有可能做这样的事情吗?
def files():
return open('a.txt', 'w'), open('b.txt', 'w')
with files():
pass
或者这个:
files = open('a.txt', 'w'), open('b.txt', 'w')
with files:
pass
【问题讨论】:
-
这是一个不安全的模式——如果打开第二个文件时出现问题,第一个文件不会被关闭。如果您详细说明为什么要这样做,我们可能会为您提供更好的选择。 (ExitStack 很可能参与其中。)
-
@user2357112 是的......本来建议看看
contextlib.ExitStack,因为这是我的直觉,但我仍然不确定用例是什么...... -
有没有办法让它安全,例如复制
with open(...), open()...的行为。也许将上下文保存到变量中并不好,但是带有函数的模式应该是安全的。
标签: python python-3.x with-statement