2016-06-28 81 views
2

我有一個嘗試/除了我經常在我的代碼中重複部分除外部分。這使我相信,將除外部分分成一個函數會更好。將除了部分的try /除外部分隔開功能

下面是我用例:

try: 
    ... 
except api.error.ReadError as e: 
    ... 
except api.error.APIConnectionError as e: 
    ... 
except Exception as e: 
    ... 

我怎麼會去這個邏輯分離成一個功能,所以我可以做簡單的東西如:

try: 
    ... 
except: 
    my_error_handling_function(e) 
+0

如何製作自定義錯誤類,以便您可以捕捉單一類型的錯誤? –

+0

如果它們的處理方式相同,則不必分別捕獲每個異常:'except(api.error.ReadError,api.error.APIConnectionError,Exception)as e:'如果它們的處理方式不同,請勿' t使用一個函數來處理它們。 – chepner

回答

1

只要定義功能:

def my_error_handling(e): 
    #Do stuff 

...並通過exception對象作爲參數:

try: 
    #some code 
except Exception as e: 
    my_error_handling(e) 

只使用一個通用的Exception型可以讓你有一個單一的except條款和處理,並且測試你的處理函數中的不同類型的錯誤。

爲了檢查捕捉到的異常的名稱,你可以通過做得到它:

type(e).__name__ 

,它將打印的名稱,如ValueErrorIOError

+0

我理解這個部分,但我不確定在我的3個用例的上下文中my_error_handling(e)的樣子是什麼 –

+0

@MichaelSmith你簡單地做'if'語句來檢查'if type(e).__ name__ = ='ReadError'' –

+0

這就是我一直在尋找的!請儘快嘗試。 –

0

定義你的功能:

def my_error_handling(e): 
    #Handle exception 

,做你提出什麼:

try: 
    ... 
except Exception as e: 
    my_error_handling_function(e) 

您可以通過在函數中獲取異常「e」的類型來處理邏輯。見:python: How do I know what type of exception occurred?

+1

您試過/除了沒有捕獲不分配任何值'e'通過,也沒有任何指定的'Exception'類型 –

+0

但是在這一點上,my_error_handling函數如何知道在3種不同的異常情況下執行什麼邏輯? –

+0

@MichaelSmith我更新了我的帖子,包括檢查 –

0

我會建議重構你的代碼,所以try/except塊只出現在一個位置。

例如,一個帶有send()方法的API類似乎是包含您在問題中描述的錯誤處理邏輯的合理候選。