Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.6中的多上下文`with`语句_Python - Fatal编程技术网

Python 2.6中的多上下文`with`语句

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语句。如果没有向后兼容的等价物,我会通过将多个上下文

我喜欢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
语句设置为一组单个上下文,嵌套
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()打开两个文件是一个编程错误,因为如果在打开第二个文件时引发异常,第一个文件将不会立即关闭。”感谢您的说明和链接。