Python 2.6中的多上下文`with`语句
我喜欢Python 2.7中使用语句的多上下文Python 2.6中的多上下文`with`语句,python,Python,我喜欢Python 2.7中使用语句的多上下文的便利性: with open('a.txt') as a, open('b.txt') as b: do_many_amazing_things(a, b) 但是,我需要保持与2.6的兼容性 通过\uuuuu future\uuuuuu将带有的移植到2.5,但我在文档中找不到任何关于多上下文版本被移植到2.6的信息 我错过了什么吗 编辑:我知道可以用语句嵌套。我在问是否可以使用多个with语句。如果没有向后兼容的等价物,我会通过将多个上下文
的便利性:
with open('a.txt') as a, open('b.txt') as b:
do_many_amazing_things(a, b)
但是,我需要保持与2.6的兼容性
通过\uuuuu future\uuuuuu
将带有的移植到2.5,但我在文档中找不到任何关于多上下文版本被移植到2.6的信息
我错过了什么吗
编辑:我知道可以用
语句嵌套。我在问是否可以使用多个with语句。如果没有向后兼容的等价物,我会通过将多个上下文with
语句设置为一组单个上下文,嵌套with
语句来处理它
with open('a.txt') as a:
with open('b.txt') as b:
do_many_amazing_things(a, b)
编辑以解决您的编辑问题:
如果您坚持不使用
语句嵌套额外的,则始终可以使用contextlib
import contextlib
with contextlib.nested(open("a.txt"), open("b.txt")) as (a, b):
do_many_amazing_things(a,b)
至于使用多个和
语句,从未来导入的和
,据我所知,这是不可能的事实上,我很惊讶这个特性被添加到Python中-指导原则一直是使事情简单明了,但是,由于使用
语句嵌套是很自然的……如果执行的操作超过2个,则会变得很糟糕。如果第一个文件打开,而不是第二个文件,contextlib解决方案不会失败吗?第一个文件不会关闭?@Mark Random我相信,我应该提到这一点,但这是我能找到的最接近奥斯汀意图的东西我不明白你为什么说第一个文件不会关闭。如果以一种方式写入与另一种方式相同,则无论执行流如何从第一个上下文中流出,第一个文件都将关闭。@Gabriel这是contextlib.nested的错误。信息:->“这意味着,例如,使用nested()打开两个文件是一个编程错误,因为如果在打开第二个文件时引发异常,第一个文件将不会立即关闭。”感谢您的说明和链接。