Как я могу избежать: «У экземпляра ZipFile нет атрибута« __exit__ »при извлечении zip-файла?

Код:

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

Привет, возможно, поздно, но я просто разрешаю эту ошибку для меня так :).

Я делаю свой код на python 2.7, но когда я помещаю его на свой сервер, который использует 2.6, у меня есть эта ошибка:

AttributeError: ZipFile instance has no attribute '__exit__'

Для решения этих проблем я использую ответ Себастьяна на этот пост: Создание кода Python 2.7 с 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

С уважением, (извините за мой английский)

Согласно документации Python, ZipFile.extractall() был добавлен в версии 2.6. Я ожидаю, что вы обнаружите, что используете другую, более раннюю (до 2.6) версию Python, чем ту, что используется в режиме ожидания. Вы можете узнать, какая версия:

 import sys print sys.version 

и местоположение работающего интерпретатора можно получить с помощью

 print sys.executable 

Заголовок вашего вопроса поддерживает вероятность того, что старая версия Python будет __exit__() потому что with операторов / менеджеров контекста (классы с __exit__() ) не были введены до __exit__() 2.6 (хорошо 2.5, если явно разрешено).