2015-04-15 61 views
1

我一直在研究Python中的一個程序,它破解了加密的zip文件。問題是,我的程序的一部分關鍵功能不起作用。Python蠻力強制zip文件

我的程序是如何打算工作...

用戶在壓縮文件名。

用戶輸入最小密碼長度。

用戶輸入最大密碼長度。

程序將進入一個循環,在那裏它將生成一個密碼,該密碼在最大數量的最小&範圍內。

程序將嘗試用密碼打開zip文件。

如果程序成功與否,程序將輸出密碼。

這是我的程序弄亂了第二個最後一步。

而不是當密碼匹配時彎腰,程序繼續,然後嘗試另一個密碼。我想這是因爲當它試圖打開壓縮文件時發生錯誤。所以即使密碼匹配,它只是直接到「except:」語句。

這裏是我的代碼弄亂 -

# 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) 

任何人都可以請告訴我如何使這項工作。謝謝

+2

[to,two and too](http://www.bristol.ac.uk/arts/exercises/grammar/grammar_tutorial/page_15.htm)不可互換。 –

+3

您可以將代碼縮減爲問題步驟的[最小示例](http://stackoverflow.com/help/mcve),並展開*「彌補」*? – jonrsharpe

+0

@jonrsharpe我將它編輯爲重要信息,並且我添加了一些關於出錯的更多細節 –

回答

2

當您撥打exit(0)會發生什麼情況?好吧,如果你讀內置exit的文件,然後你會看到,它說:

調用時,提高SystemExit與指定的退出代碼

所以它拋出一個異常,但在您的程序中,這是在try: ... except: ...之內,所以接下來發生的情況是發現異常並且程序打印Failed並繼續。

這就是爲什麼人們經常給出建議「don't use a bare except:」 - 你幾乎從不想抓到SystemExit

相反,當密碼不匹配時,您可以看到zipfile引發的實際異常,這似乎是RuntimeError。此外,如果您將exit(0)替換爲return True之類的內容,並且可以在程序的更高級別上處理成功或失敗,那麼它將改進該程序。