我怎样才能避免:" ZipFile实例没有属性' __退出__''""提取zip文件时?

时间:2015-10-01 09:39:56

标签: 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空闲运行时工作。 我正在运行python v2.7.10

2 个答案:

答案 0 :(得分:6)

你好,也许迟到但我只是为我解决了这个错误:)。

我在python 2.7上创建代码但是当我把它放在使用2.6的服务器上时我有这个错误:

AttributeError: ZipFile instance has no attribute '__exit__'

为了解决这个问题,我在这篇文章中使用了塞巴斯蒂安的答案: 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方法

亲切的问候,(对不起我的英语)

答案 1 :(得分:0)

根据Python文档,在版本2.6中添加了ZipFile.extractall()。我希望你会发现你运行的是一个不同于旧版本(2.6之前版本)的Python版本,而不是空闲版本。你可以找到这个版本:

import sys
print sys.version

可以使用

获取正在运行的解释器的位置
print sys.executable

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