1. 程式人生 > >Python基礎:內置異常(未完待續)

Python基礎:內置異常(未完待續)

async def cee outer keyboard 補充 調用 enter err

本文根據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基礎:內置異常(未完待續)