2013-04-28 146 views
3

我在寫一個python程序訪問數據庫。我想在發出http請求時捕獲三種類型的異常。超時,網絡錯誤和http錯誤。我正在尋找處理這種情況的最佳方法。我需要在我的代碼多個區域多次檢查這些例外,它會是這個樣子,每次:Python異常處理 - 最佳實踐

try: 

    //some request 

except timeout: 
    print '\nException: Timeout Error' 

except connection error: 
    print '\nException: Network Error' 

except http error, e: 
    print 'Exception: %s.' % e 

既然我有這個多次這樣做,至少是可能的8個或更多,應該我創建一個模塊來處理這些異常或不是?同樣在哪些情況下,建議關閉我的系統而不是僅顯示一條消息?

謝謝。

回答

3

如果你不想使用裝飾器,你也可以組合所有的except語句,並使用一些函數來處理你的異常(假設你的錯誤被稱爲TimeoutError,ConnectionError和HttpError ...)真正重要的清晰度),即

try: 
    # do stuff 
except (TimeoutError, ConnectionError, HttpError) as e: 
    handle_exception(e) 
+0

出於好奇,當你做除外(超時,CONNECTION_ERROR,HTTP_ERROR)作爲E:這是否意味着,電子將字符串「超時」,「CONNECTION_ERROR」,「HTTP_ERROR 「,還是會是實際的錯誤?同樣,如果第一部分是這種情況,那麼你怎樣捕捉實際的錯誤,例如404錯誤或其他性質? – CoffeeIsProgramming 2013-04-28 22:46:46

+1

我只是你的風格。你需要實際的錯誤;但是,您可以將它們存儲爲變量。它只是意味着'e'存儲了異常變量(它類似於像'with open(path)'這樣的語句作爲e:'爲了清楚起見,錯誤將保持相同的類型,如果你做了三個單獨的版本 - 所以如果你把'except(ValueError,TypeError)'作爲e:','e'將是一個'TypeError'或'ValueError' – 2013-04-28 23:01:21