5

代码是:

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 idle 运行时有效。我正在运行 python v2.7.10

4

2 回答 2

12

我在 python 2.7 上编写了我的代码,但是当我把它放在使用 2.6 的服务器上时,我遇到了这个错误:

AttributeError: ZipFile instance has no attribute '__exit__'

为了解决这个问题,我在这篇文章中使用了 Sebastian 的回答: Making Python 2.7 code run with Python 2.6

import contextlib

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

就像他说的:

contextlib.closing 正是 ZipFile 上缺少的退出方法应该做的事情。即调用close方法

于 2015-11-13T13:17:26.163 回答
0

根据 Python 文档,ZipFile.extractall()在 2.6 版中添加。我希望您会发现您运行的 Python 版本与 idle 正在使用的版本不同,版本较旧(2.6 之前)。你可以用这个找出哪个版本:

import sys
print sys.version

并且可以通过以下方式获得正在运行的解释器的位置

print sys.executable

您的问题的标题支持执行旧版本 Python 的可能性,因为with语句/上下文管理器(带有__exit__()方法的类)直到 2.6 才引入(如果明确启用,则为 2.5)。

于 2015-10-01T10:48:32.890 回答