我一直在研究Python中的一个程序,它破解了加密的zip文件。问题是,我的程序的一部分关键功能不起作用。
我的计划如何运作...
用户输入zip文件名。
用户输入最小密码长度。
用户输入最大密码长度。
程序将进入一个循环,它将生成一个在最小值和最小值内的密码。最大数量。
程序将尝试使用密码打开zip。
如果密码成功,程序将打印出密码。
这是我的计划搞砸的第二步。
当密码匹配时,程序继续,而不是弯腰,然后尝试另一个密码。我认为这是因为在尝试打开zip时发生错误。因此,即使密码匹配,它也只是直接进入"除了:"言。
这是我的代码搞砸了 -
# Function which tries to open zip (The buggy function)
def extract(zip_name, password, number):
print("\nAttempt", number)
# Tries and opens the zip
try:
zip_name.extractall(pwd=password)
print("Success: " + password)
exit(0)
except:
print("Failed: " + password)
任何人都可以告诉我如何使这项工作。感谢
答案 0 :(得分:2)
致电exit(0)
时会发生什么?好吧,如果您阅读了内置exit
的文档,那么您会看到它说:
调用时,使用指定的退出代码
引发SystemExit
所以它引发了一个异常,但是在你的程序中,它位于try: ... except: ...
内,所以接下来发生的事情是捕获异常并且程序打印Failed
并继续。
这就是为什么人们经常提出建议" don't use a bare except:
" - 你几乎不想抓住SystemExit
。
相反,当密码不匹配时,您可以捕获zipfile
引发的实际异常,这似乎是RuntimeError
。此外,如果您使用exit(0)
替换return True
,并在程序的更高级别处理成功或失败,它将改进该计划。