2013-07-23 53 views
4

在python中,每當我們寫用戶定義的異常時,我們必須從類Exception擴展它。 我的問題是爲什麼我們不能將它從BaseException擴展爲異常層次的超類,而Exception也是BaseException的子類。爲什麼我們應該使用Exception作爲超類,爲什麼不使用BaseException

+2

當然可以。你是否應該*是一個不同的問題。 Python只是想讓你在腳下拍攝自己有點困難,但如果你堅持,沒有人會保持你:) –

回答

7

BaseException包括諸如KeyboardInterruptSystemExit之類的東西,它們使用異常機制,但大多數人不應該捕捉。這與Java中的Throwable類似,如果你對此熟悉的話。從BaseException直接派生的東西通常用於在執行finally塊和上下文管理器__exit__方法釋放資源時關閉系統。

3

%的Python2 documentation有四種例外情況是BaseException衍生物:

BaseException 
+-- SystemExit 
+-- KeyboardInterrupt 
+-- GeneratorExit 
+-- Exception 

三個不在Exception實際上並沒有錯誤,這意味着一般你不想趕上他們彷彿他們是錯誤的。在Python2.5中添加了BaseException(在此之前,沒有BaseException,其他例外從Exception分類)。

相關問題