2010-07-13 49 views
3

條件檢查:如何編寫安全代碼:條件檢查與異常處理?

if denominator == 0: 
    // do something like informing the user, or skipping this iteration. 
else: 
    result = numerator/denominator 

if FileExists('path/to/file'): 
    // open file read & write. 
else: 
    // do something like informing the user, or skipping this iteration. 

異常處理:

try: 
    result = numerator/denominator 
catch (DevidedByZeroException): 
    //take action 

try: 
    //open file read & write. 
catch (FileNotExistsException): 
    //take action 

我頻頻遭遇的情況是這樣的。哪一個去?爲什麼?

回答

5

一如既往依賴。

在我看來,例外應該是例外。

如果您經常期待某件事可能不起作用,那麼您應該進行有條件檢查。無論是否有問題,條件檢查代碼都會一直執行,所以檢查不應該花費很多時間。

您應該爲罕見或不太可能的情況離開異常處理。那麼該文件將不存在的可能性有多大?

我有一個情況,我想寫一個文件到網絡驅動器,檢查UNC共享存在的代碼可能需要長達30秒的超時時間,所以你想在這裏使用異常!

1

我認爲第二snipet異常處理更好,因爲你可以捕捉其他異常產生的不可預知的錯誤。

而且在很多情況下,你的指令時,一些事情不好不拋出一個異常,那麼您必須使用狀況來檢測它,你可以不用異常捕獲或try塊與expeption的罰球很好的實例使用類。

1

在第一個示例中,完全有可能在檢查和打開之間刪除文件,因此無論如何您都可能會收到FileNotExistsException。在Python社區中,這被稱爲LBYL(看你跳躍之前)vs EAFP(容易請求寬恕而不是許可)辯論,Pythonic的共識是EAFP總體上更好。