Python 我怎样才能避免:“我怎么能避免?”;ZipFile实例没有属性'__退出''&引用;提取zip文件时?

Python 我怎样才能避免:“我怎么能避免?”;ZipFile实例没有属性'__退出''&引用;提取zip文件时?,python,zipfile,execfile,Python,Zipfile,Execfile,代码是: import sys execfile('test.py') 在test.py中,我有: import zipfile with zipfile.ZipFile('test.jar', 'r') as z: z.extractall("C:\testfolder") 此代码生成: AttributeError ( ZipFile instance has no attribute '__exit__' ) # edited “test.py”中的代码在python空闲时运

代码是:

import sys
execfile('test.py')
在test.py中,我有:

import zipfile
with zipfile.ZipFile('test.jar', 'r') as z:
    z.extractall("C:\testfolder")
此代码生成:

AttributeError ( ZipFile instance has no attribute '__exit__' ) # edited
“test.py”中的代码在python空闲时运行。
根据python文档,我正在运行python v2.7.10,它是在2.6版中添加的。我希望您会发现,您运行的Python版本与idle使用的版本不同,更旧(2.6之前)。您可以通过以下内容了解哪个版本:

import sys
print sys.version
并且运行的解释器的位置可以通过

print sys.executable

您问题的标题支持旧版本Python被执行的可能性,因为带有语句/上下文管理器的
(带有
\uuuuuuu exit\uuuu()
方法的类)直到2.6才被引入(如果显式启用,则为2.5).

我在python 2.7上编写了代码,但当我将其放在使用2.6的服务器上时,出现了以下错误:

AttributeError:ZipFile实例没有属性“\uuuu exit\uuuu”

为了解决这个问题,我在这篇文章中使用了塞巴斯蒂安的答案:

正如他所说:

contextlib.closing与缺少的exit方法完全相同 拉链应该可以。即,调用close方法


标题是
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,问题中的错误是
extractall
,哪一个是相关的?如果您试图直接执行
test.py
,是否会发生同样的情况?此外,您还应该添加第二个反斜杠或使用
r“C:\testfolder”
来避免
\t
成为制表符。只需在Python 3.4.1中尝试了这一点,并且没有出现奇怪的错误。显然,使用不同的.zip文件。如果不是Python版本问题,可能是zip文件损坏的问题吗?(使用命令行中的
zip-T文件
进行检查)很抱歉出现复制粘贴错误。错误显示为“”。。。no attribute exit“import sys print sys.version;返回:2.7.10(默认值,2015年5月23日09:44:00)[MSC v.1500 64位(AMD64)]@Martin Evans;否。从空闲运行时,我没有遇到任何问题,因此在@nigel222提取存档文件。我尝试使用不同的zip文件时,都返回相同的问题[解释器:]与python 2.7.10一起提供的标准Idle。[sys.executable]在空闲输出中:C:\Python27\pythonw.exe;outdside Idle返回:无
import contextlib

def unzip(source, target):
    with contextlib.closing(zipfile.ZipFile(source , "r")) as z:
        z.extractall(target)
    print "Extracted : " + source +  " to: " + target