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

Aus*_*son 17 python

我喜欢withPython 2.7中多重上下文语句的便利性:

with open('a.txt') as a, open('b.txt') as b:
   do_many_amazing_things(a, b)
Run Code Online (Sandbox Code Playgroud)

但是,我需要保持与2.6的兼容性.

with被带到2.5通过__future__,但我无法找到任何关于在文档中反向移植到2.6的多个上下文版本.

我错过了什么吗?

编辑:我知道可以嵌套with语句.我在问是否可以使用多个with语句.

jsv*_*svk 20

如果没有可能的向后兼容等价物,我会通过使多上下文with语句成为一组单上下文嵌套with语句来处理它.

with open('a.txt') as a: 
    with open('b.txt') as b:
        do_many_amazing_things(a, b)
Run Code Online (Sandbox Code Playgroud)

编辑以解决您的编辑:

如果您坚持不嵌套额外的with语句,您可以随时使用contextlib

import contextlib
with contextlib.nested(open("a.txt"), open("b.txt")) as (a, b):
    do_many_amazing_things(a,b)
Run Code Online (Sandbox Code Playgroud)

至于使用with未来导入的多个语句,with据我所知,这是不可能的

  • @Gabriel这是contextlib.nested的一个错误.信息:http://docs.python.org/2/library/contextlib.html#contextlib.nested - >"这意味着,例如,使用嵌套()打开两个文件是一个编程错误,因为第一个文件将如果在打开第二个文件时抛出异常,则不会立即关闭." (2认同)