python異常集合

內置異常

在 Python 中,所有異常必須爲一個派生自 BaseException 的類的實例。 在帶有提及一個特定類的 except 子句的 try 語句中,該子句也會處理任何派生自該類的異常類(但不處理 它 所派生出的異常類)。 通過子類化創建的兩個不相關異常類永遠是不等效的,既使它們具有相同的名稱。
下面列出的內置異常可通過解釋器或內置函數來生成。除非另有說明,它們都會具有一個提示導致錯誤詳細原因的“關聯值”。 這可以是一個字符串或由多個信息項(例如一個錯誤碼和一個解釋錯誤的字符串)組成的元組。 關聯值通常會作爲參數被傳遞給異常類的構造器。
用戶代碼可以引發內置異常。 這可被用於測試異常處理程序或報告錯誤條件,“就像” 在解釋器引發了相同異常的情況時一樣;但是請注意,沒有任何機制能防止用戶代碼引發不適當的錯誤。

具體異常

以下異常屬於經常被引發的異常。

exception AssertionError

當 assert 語句失敗時將被引發。

exception AttributeError

當屬性引用 (參見 屬性引用) 或賦值失敗時將被引發。 (當一個對象根本不支持屬性引用或屬性賦值時則將引發 TypeError。)

exception EOFError

當 input() 函數未讀取任何數據即達到文件結束條件 (EOF) 時將被引發。 (另外,io.IOBase.read() 和 io.IOBase.readline() 方法在遇到 EOF 則將返回一個空字符串。)

exception GeneratorExit

當一個 generator 或 coroutine 被關閉時將被引發;參見 generator.close() 和 coroutine.close()。 它直接繼承自 BaseException 而不是 Exception,因爲從技術上來說它並不是一個錯誤。

exception ImportError

當 import 語句嘗試加載模塊遇到麻煩時將被引發。 並且當 from … import 中的 “from list” 存在無法找到的名稱時也會被引發。

exception IndentationError

與不正確的縮進相關的語法錯誤的基類。 這是 SyntaxError 的一個子類。

exception IndexError

當序列抽取超出範圍時將被引發。 (切片索引會被靜默截短到允許的範圍;如果指定索引不是整數則 TypeError 會被引發。)

exception KeyError

當在現有鍵集合中找不到指定的映射(字典)鍵時將被引發。

exception KeyboardInterrupt

當用戶按下中斷鍵 (通常爲 Control-C 或 Delete) 時將被引發。 在執行期間,會定期檢測中斷信號。 該異常繼承自 BaseException 以確保不會被處理 Exception 的代碼意外捕獲,這樣可以避免退出解釋器。

exception MemoryError

當一個操作耗盡內存但情況仍可(通過刪除一些對象)進行挽救時將被引發。 關聯的值是一個字符串,指明是哪種(內部)操作耗盡了內存。 請注意由於底層的內存管理架構(C 的 malloc() 函數),解釋器也許並不總是能夠從這種情況下完全恢復;但它畢竟可以引發一個異常,這樣就能打印出棧回溯信息,以便找出導致問題的失控程序。

exception NameError

當某個局部或全局名稱未找到時將被引發。 此異常僅用於非限定名稱。 關聯的值是一條錯誤信息,其中包含未找到的名稱。

exception NotImplementedError

此異常派生自 RuntimeError。 在用戶自定義的基類中,抽象方法應當在其要求所派生類重載該方法,或是在其要求所開發的類提示具體實現尚待添加時引發此異常。

exception SyntaxError

當解析器遇到語法錯誤時將被引發。 這可以發生在 import 語句,對內置函數 exec() 或 eval() 的調用,或者讀取原始腳本或標準輸入(也包括交互模式)的時候。
該類的實例包含有屬性 filename, lineno, offset 和 text 用於方便地訪問相應的詳細信息。 異常實例的 str() 僅返回消息文本。

exception SystemError

當解釋器發現內部錯誤,但情況看起來尚未嚴重到要放棄所有希望時將被引發。 關聯的值是一個指明發生了什麼問題的字符串(表示爲低層級的符號)。

exception TabError

當縮進包含對製表符和空格符不一致的使用時將被引發。 這是 IndentationError 的一個子類。

exception TypeError

當一個操作或函數被應用於類型不適當的對象時將被引發。 關聯的值是一個字符串,給出有關類型不匹配的詳情。
此異常可以由用戶代碼引發,以表明嘗試對某個對象進行的操作不受支持也不應當受支持。 如果某個對象應當支持給定的操作但尚未提供相應的實現,所要引發的適當異常應爲 NotImplementedError。
傳入參數的類型錯誤 (例如在要求 int 時卻傳入了 list) 應當導致 TypeError,但傳入參數的值錯誤 (例如傳入要求範圍之外的數值) 則應當導致 ValueError。

exception UnboundLocalError

當在函數或方法中對某個局部變量進行引用,但該變量並未綁定任何值時將被引發。 此異常是 NameError 的一個子類。

exception ValueError

當操作或函數接收到具有正確類型但值不適合的參數,並且情況不能用更精確的異常例如 IndexError 來描述時將被引發。

exception ZeroDivisionError

當除法或取餘運算的第二個參數爲零時將被引發。 關聯的值是一個字符串,指明操作數和運算的類型。

異常層次結構

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章