Python基礎:內置異常(未完待續)
本文根據Python 3.6.5的官文Built-in Exceptions編寫,不會很詳細,僅對Python的內置異常進行簡單(重難點)介紹——很多異常都可以從名稱判斷出其意義,羅列所有的內置異常。
在Python中,所有的異常都是派生自BaseException的類的實例。
內置異常可以被繼承以定義新的異常類,推薦程序員基於Exception或它的子類去定義新的異常類,而不是基於BaseException,更多自定義異常類的信息請參考User-defined Exceptions。
在except或finally從句中產生一個異常時,__context__自動被設置為最後異常捕獲;如果新的異常沒有被處理,回溯器(traceback,最終被顯示出來)會包含最初的和最終的異常。
在產生一個異常時,隱含的異常上下文可以使用和raise一起使用的from來補充明確的原因:
raise new_exc from original_exc
跟隨from的表達式必須是一個異常或None,它會被設置在產生的異常的__cause__屬性中。(還有更多,翻譯不了了)
P.S.上面的信息主要來自官文的翻譯,和自己水平有關,並不完整,大家可以參考官文。
1.異常類基類
下面的這些異常類通常用於其它異常類的基類。
exception BaseException
所有異常類的基類,但並不意味著直接被用戶定義的類繼承(請使用Exception,直接繼承又怎樣?)
-args
提供給異常類構造器的參數。一些內置異常會期待一定數量的參數,並給這個元組的元素指定一個特殊的意義,而其它的異常類通常被調用時只需要提供一個錯誤信息的字符串即可。
-with_traceback(tb)
設置tb作為異常的新的回溯器,並返回異常對象。
通常用法如下(引用自官網):
1 try: 2 ... 3 except SomeException: 4 tb = sys.exc_info()[2] 5 raise OtherException(...).with_traceback(tb)
exception Exception
所有內置的、不會導致系統退出的異常類都派生自Exception,所有用戶自定義的異常類也應該派生自Exception(第三次提到)。
exception ArithmeticError
所有算術方面的錯誤的基類,比如,OverflowError, ZeroDivisionError, FloatingPointError。
exception BufferError
緩存操作不能被執行時產生此異常。
exception LookupError
在映射對象使用關鍵字(key)(KeyError)、序列對象使用序號(index)(IndexError) 查找元素時,如果發生錯誤就會產生此異常的子類。可以直接使用codecs.lookup()產生此異常。
2.具體異常類
exception AssertionError
exception AttributeError
exception EOFError
exception FloatingPointError
exception GeneratorExit
exception ImportError
exception ModuleNotFoundError
exception IndexError
exception KeyError
exception KeyboardInterrupt
exception MemoryError
exception NameError
exception NotImplementedError
exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
exception OverflowError
exception RecursionError
exception ReferenceError
exception RuntimeError
exception StopIteration
exception StopAsyncIteration
exception SyntaxError
exception IndentationError
exception TabError
exception SystemError
exception SystemExit
exception TypeError
exception UnboundLocalError
exception UnicodeError
exception UnicodeEncodeError
exception UnicodeDecodeError
exception UnicodeTranslateError
exception ValueError
exception ZeroDivisionError
exception EnvironmentError
exception IOError
exception WindowsError
2.1.OS異常
下面的異常類都是OSError的子類,它們會根據系統錯誤代碼(the system error code,是什麽?哪裏找?)的值被產生。
exception BlockingIOError
exception ChildProcessError
exception ConnectionError
exception BrokenPipeError
exception ConnectionAbortedError
exception ConnectionRefusedError
exception ConnectionResetError
exception FileExistsError
exception FileNotFoundError
exception InterruptedError
exception IsADirectoryError
exception NotADirectoryError
exception PermissionError
exception ProcessLookupError
exception TimeoutError
3.報警類異常
下面的異常用於報警,更多信息可以查看warnings模塊。
exception Warning
exception UserWarning
exception DeprecationWarning
exception PendingDeprecationWarning
exception SyntaxWarning
exception RuntimeWarning
exception FutureWarning
exception ImportWarning
exception UnicodeWarning
exception BytesWarning
exception ResourceWarning
4.異常層次結構
來自官文。
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
| +-- ModuleNotFoundError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
| +-- RecursionError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
Python基礎:內置異常(未完待續)