2017-07-25 71 views
2

我有一系列定義的異常,這取決於問題以及用戶的自定義消息。檢測異常類型

我想開發錯誤使用這些自定義異常處理的機制,讓他們泡到一個更高級別的日誌記錄類,並最終給用戶,使我們可以提供反饋,並告訴他們要解決什麼。它甚至可能是後端系統退出,所以他們知道稍後會回來。

但是,如果它不是手動創建一個例外,它是一個系統異常(這些被提出,但包裹在一個自定義異常),我想返回的一般錯誤。

當我處理我的例外,是什麼來檢測,如果它是我的什麼我沒佔到一個好辦法?

我在想一個基地一個帶有自定義屬性下繼承我所有的異常,讓異常冒泡時檢查它,但它似乎有點哈克。

謝謝

回答

4

您可以從單一類型派生所有例外。許多主要的Python庫都這樣做。

現在,看我怎麼從共享基類派生乙?

class A(Exception): 
    pass 

class B(A): 
    pass 

讓我們來看看它的工作原理:

>>> try: 
>>>  raise B 
>>> except A: 
>>>  print("Caught") 
>>>  
Caught 

而且它沒有趕上無關的異常?

>>> try: 
>>>  [][1] 
>>> except A: 
>>>  print("Caught") 
>>>  
IndexError: list index out of range 

很好。

繼承是您的朋友:從您定義的單個鹼基例外只要繼承,你可以嘗試明確捕獲這個異常,登錄,並重新拋出。如果它不是來自你的圖書館,那麼錯誤將不會被捕獲。

+1

不錯,正是我在找的東西。我沒有意識到除了會檢查父類。 – browskie