6

我正在尝试将“With open()”与 python 2.6 一起使用,它给出了错误(语法错误),而它与 python 2.7.3 一起工作正常我是否缺少某些东西或一些导入来使我的程序工作!

任何帮助,将不胜感激。

我的代码在这里:

def compare_some_text_of_a_file(self, exportfileTransferFolder, exportfileCheckFilesFolder) :
    flag = 0
    error = ""
    with open("check_files/"+exportfileCheckFilesFolder+".txt") as f1,open("transfer-out/"+exportfileTransferFolder) as f2:

        if f1.read().strip() in f2.read():
            print ""
        else:
            flag = 1
            error = exportfileCheckFilesFolder
            error = "Data of file " + error + " do not match with exported data\n"
        if flag == 1:   
            raise AssertionError(error)
4

3 回答 3

11

Python 2.6 支持该with open()语句,您必须有不同的错误。

有关详细信息,请参阅PEP 343和 python文件对象文档

快速演示:

Python 2.6.8 (unknown, Apr 19 2012, 01:24:00) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> with open('/tmp/test/a.txt') as f:
...     print f.readline()
... 
foo

>>> 

您正在尝试将with语句与多个上下文管理器一起使用,该语句仅在 Python 2.7 中添加

在 2.7 版更改: 支持多个上下文表达式。

在 2.6 中改用嵌套语句:

with open("check_files/"+exportfileCheckFilesFolder+".txt") as f1:
    with open("transfer-out/"+exportfileTransferFolder) as f2:
        # f1 and f2 are now both open.
于 2012-08-27T08:10:12.250 回答
5

它是with具有多个上下文表达式的“扩展”语句,这会给您带来麻烦。

在 2.6 中,而不是

with open(...) as f1, open(...) as f2:
    do_stuff()

你应该添加一个嵌套级别并编写

with open(...) as f1:
    with open(...) as f2:
        do.stuff()

文件

在 2.7 版更改:支持多个上下文表达式。

于 2012-08-27T11:26:27.103 回答
0

with open()Python 2.6 支持该语法。在 Python 2.4 上,它不受支持并给出语法错误。如果您需要支持 PYthon 2.4,我会建议类似:

def readfile(filename, mode='r'):
    f = open(filename, mode)
    try:
        for line in f:
            yield f
    except e:
        f.close()
        raise e
    f.close()

for line in readfile(myfile):
    print line
于 2012-08-27T08:18:54.567 回答