2016-08-10 4 views
0

Вот мой сценарий:zipfile.extractall всегда дает исключение

import zipfile 
zFile = zipfile.ZipFile('crack.zip') 
passFile = open('passwords.txt') 
for line in passFile.readlines(): 
    password = line.strip('\n') 
    try: 
     zFile.extractall(pwd=password) 
     print password 
    except Exception, e: 
    print e 

Это содержимое passwords.txt:

abcde 
fghijk 
secret 
lmnopq 
rstw 
uvwxyz 

Файл passwords.txt имеет 5 строк, из которых только один правильный пароль для этого zip-файла (как вы бы догадались, секрет - правильный пароль). Когда я запускаю этот скрипт, он всегда идет в блок catch и печатает ('Bad password for file', <zipfile.ZipInfo object at 0x7f70836d52a8>) 5 раз. Что я здесь делаю неправильно?

ответ

0

После того, как вы успешно распакуете файл с правильным паролем, вы не остановите цикл. Поэтому он продолжает и пытается использовать три других пароля. В вашем файле имеется пять неправильных паролей, поэтому вы получаете пять исключений. Чтобы исправить это, добавьте оператор break. Я немного изменил ваш код, потому что, как правило, в блоке try должен быть только оператор, который вы хотите уловить.

for line in passFile: 
    password = line.strip() 
    print password 
    try: 
     zFile.extractall(pwd=password) 
    except Exception, e: 
     print e 
    else: 
     print "success" 
     break 
+0

вещь, он никогда не распаковывает файл, я проверил –

+0

Тогда почему твой вопрос о том, почему ваш сценарий получает пять исключений, вместо того, почему он не разархивировать файл? (Подсказка: если это не дает вам ошибку, она распаковывает файл. Вопрос: где?) – kindall

+0

он переходит в блок исключений, поэтому он никогда не распаковывает файл –

Смежные вопросы