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

17 投票
1 回答
8070 浏览
提问于 2025-04-17 04:11

我很喜欢Python 2.7中多个上下文的with语句带来的便利:

with open('a.txt') as a, open('b.txt') as b:
   do_many_amazing_things(a, b)

不过,我需要保持与2.6版本的兼容性。

with语句是在2.5版本通过__future__引入的,但我在文档中找不到关于多个上下文版本被移植到2.6的任何信息。

我是不是漏掉了什么?

补充:我知道可以嵌套with语句。我是在问是否可以使用多个with语句。

1 个回答

20

如果没有向后兼容的替代方案,我会通过把多个上下文的 with 语句变成一组单个上下文的嵌套 with 语句来处理。

with open('a.txt') as a: 
    with open('b.txt') as b:
        do_many_amazing_things(a, b)

编辑以回应你的编辑:

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

import contextlib
with contextlib.nested(open("a.txt"), open("b.txt")) as (a, b):
    do_many_amazing_things(a,b)

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

撰写回答