-4
爲什麼我們不應該爲了創建自己的Exception而擴展BaseException類而不是在Python2.7中擴展Exception類?爲什麼我們不應該放棄BaseException類?
爲什麼我們不應該爲了創建自己的Exception而擴展BaseException類而不是在Python2.7中擴展Exception類?爲什麼我們不應該放棄BaseException類?
讓我們來看看Exception hierarchy。
來自BaseException
的唯一例外是SystemExit
,KeyboardInterrupt
和GeneratorExit
。他們是例外,不應該被意外發現。這就是他們與衆不同的原因。從KeyboardInterrupt
引用:
例外從BaseException繼承,以便不通過,捕捉異常並因此防止解釋從離開代碼被意外捕獲。
這也是爲什麼你不應該使用try: ... except: ...
而沒有指定異常類型。
感謝您回覆我的問題。我發現了一些答案,在BaseException中有一個finally塊,它有__exit __()方法導致退出應用程序。這就是我們不應該擴展BaseException而不是Exception類的原因... – nanithehaddock
這沒有任何意義。 Exception擴展了BaseException,所以Exception有'__exit __()'。實際上,任何未捕獲的異常都會退出應用程序。你能把我的一個鏈接放到一個鏈接上嗎? – gioi
'__exit __()'是一個上下文管理器鉤子,不會退出應用程序。 'sys.exit()'退出應用程序。 –