2017-08-30 148 views
0

問:定義自定義異常的基類

什麼是需要定義一個基類來處理錯誤?

背景:

我是通過文檔閱讀User-Defined Exception Handling當我把它們定義class Error(Exception)的例子注意到。其餘的類都是它的所有子類。

當我定義自定義異常時,我只寫了class MyExc(Exception)並且從不定義基類。

我不明白,特別是在他們的例子中,當它只是通過時,需要定義class Error(Exception)。是的,他們可能只是raise Error對於一個特定的情況,但他們不能像其他兩個例外定義ExceptionError的子類?

+1

...因爲現在你可以捕獲'錯誤'而不必單獨捕獲每一個。 –

+0

@ IgnacioVazquez-Abrams爲什麼要單獨定義它們,如果你不想特意捕捉它們呢? – datta

+0

有時你想,有時候你不想。 –

回答

0

當您編寫一個庫時,您通常會爲所有異常定義一個基本異常類,以便用戶可以簡單地同時處理它們,例如,

MyLib中

class MyError(Exception): 
    pass 

一些其他的代碼

try: 
    ... 
except MyError: 
    # MyLib error, handle it 

但說實話這 「LIB具體的」 操作很少發生(通常你要麼趕上一個特定的異常,或只是抓全部爲except Exception:)。所以我想這並不重要。更多的是風格問題。

+1

如果你抓住'Exception',那麼你就是在做錯了(除非它是你的工作,它幾乎從不)。 –

+0

@ IgnacioVazquez-Abrams哈哈,爲什麼?因爲互聯網這麼說? :D – freakish

+0

因爲它沒有告訴你任何有關例外的事情,它捕捉到的不是你的責任的例外。 –