摘要:關聯值通常會作為參數被傳遞給異常類的構造器。所有內置異常的基類。此異常僅用于非限定名稱。由內置函數和的方法所引發,用來表示該迭代器不能產生下一項。當一個或函數返回時,將引發一個新的實例,函數返回的值將被用作異常構造器的形參。
</>復制代碼
上一篇文章:Python標準庫---16、內置類型:上下文管理器類型、其他、特殊屬性
下一篇文章:Python標準庫---18、文本處理服務:string 常見的字符串操作
在 Python 中,所有異常必須為一個派生自 BaseException 的類的實例。 在帶有提及一個特定類的 except 子句的 try 語句中,該子句也會處理任何派生自該類的異常類(但不處理 它 所派生出的異常類)。 通過子類化創建的兩個不相關異常類永遠是不等效的,既使它們具有相同的名稱。
下面列出的內置異常可通過解釋器或內置函數來生成。除非另有說明,它們都會具有一個提示導致錯誤詳細原因的“關聯值”。 這可以是一個字符串或由多個信息項(例如一個錯誤碼和一個解釋錯誤的字符串)組成的元組。 關聯值通常會作為參數被傳遞給異常類的構造器。
用戶代碼可以引發內置異常。 這可被用于測試異常處理程序或報告錯誤條件,“就像” 在解釋器引發了相同異常的情況時一樣;但是請注意,沒有任何機制能防止用戶代碼引發不適當的錯誤。
內置異常類可以被子類化以定義新的異常;鼓勵程序員從 Exception 類或它的某個子類而不是從 BaseException 來派生新的異常。 關于定義異常的更多信息可以在 Python 教程的 用戶自定義異常 部分查看。
當在 except 或 finally 子句中引發(或重新引發)異常時,__context__ 會被自動設為所捕獲的最后一個異常;如果新的異常未被處理,則最終顯示的回溯信息將包括原始的異常和最后的異常。
當引發一個新的異常(而不是簡單地使用 raise 來重新引發當前在處理的異常)時,隱式的異常上下文可以通過使用帶有 raise 的 from 來補充一個顯式的原因:
</>復制代碼
raise new_exc from original_exc
跟在 from 之后的表達式必須為一個異常或 None。 它將在所引發的異常上被設置為 cause__。 設置 __cause 還會隱式地將 suppress_context 屬性設為 True,這樣使用 raise new_exc from None 可以有效地將舊異常替換為新異常來顯示其目的 (例如將 KeyError 轉換為 AttributeError),同時讓舊異常在 context 中保持可用狀態以便在調試時進行內省。
除了異常本身的回溯以外,默認的回溯還會顯示這些串連的異常。 cause 中的顯式串連異常如果存在將總是顯示。 context 中的隱式串連異常僅在 cause 為 None 并且 suppress_context 為假值時顯示。
不論在哪種情況下,異常本身總會在任何串連異常之后顯示,以便回溯的最后一行總是顯示所引發的最后一個異常。
基類下列異常主要被用作其他異常的基類。
exception BaseException</>復制代碼
所有內置異常的基類。 它不應該被用戶自定義類直接繼承 (這種情況請使用 Exception)。 如果在此類的實例上調用 str(),則會返回實例的參數表示,或者當沒有參數時返回空字符串。
args
with_traceback(tb)</>復制代碼
傳給異常構造器的參數元組。 某些內置異常 (例如 OSError) 接受特定數量的參數并賦予此元組中的元素特殊的含義,而其他異常通常只接受一個給出錯誤信息的多帶帶字符串。
</>復制代碼
此方法將 tb 設為異常的新回溯信息并返回該異常對象。 它通常以如下的形式在異常處理程序中使用:
</>復制代碼
try:
...
except SomeException:
tb = sys.exc_info()[2]
raise OtherException(...).with_traceback(tb)
exception Exception
exception ArithmeticError</>復制代碼
所有內置的非系統退出類異常都派生自此類。 所有用戶自定義異常也應當派生自此類。
</>復制代碼
此基類用于派生針對各種算術類錯誤而引發的內置異常: OverflowError, ZeroDivisionError, FloatingPointError。
exception BufferError
exception LookupError</>復制代碼
當與 緩沖區 相關的操作無法執行時將被引發。
</>復制代碼
此基類用于派生當映射或序列所使用的鍵或索引無效時引發的異常: IndexError, KeyError。 這可以通過 codecs.lookup() 來直接引發。
具體異常
以下異常屬于經常被引發的異常。
exception AssertionError</>復制代碼
當 assert 語句失敗時將被引發。
exception AttributeError
</>復制代碼
當屬性引用 (參見 屬性引用) 或賦值失敗時將被引發。 (當一個對象根本不支持屬性引用或屬性賦值時則將引發 TypeError。)
exception EOFError
</>復制代碼
當 input() 函數未讀取任何數據即達到文件結束條件 (EOF) 時將被引發。 (另外,io.IOBase.read() 和 io.IOBase.readline() 方法在遇到 EOF 則將返回一個空字符串。)
exception FloatingPointError
exception GeneratorExit</>復制代碼
目前未被使用。
</>復制代碼
當一個 generator 或 coroutine 被關閉時將被引發;參見 generator.close() 和 coroutine.close()。 它直接繼承自 BaseException 而不是 Exception,因為從技術上來說它并不是一個錯誤。
exception ImportError
</>復制代碼
當 import 語句嘗試加載模塊遇到麻煩時將被引發。 并且當 from ... import 中的 "from list" 存在無法找到的名稱時也會被引發。
name 與 path 屬性可通過對構造器使用僅關鍵字參數來設定。 設定后它們將分別表示被嘗試導入的模塊名稱與觸發異常的任意文件所在路徑。
在 3.3 版更改: 添加了 name 與 path 屬性。
exception ModuleNotFoundError
</>復制代碼
ImportError 的子類,當一個模塊無法被定位時將由 import 引發。 當在 sys.modules 中找到 None 時也會被引發。
3.6 新版功能.
exception IndexError
</>復制代碼
當序列抽取超出范圍時將被引發。 (切片索引會被靜默截短到允許的范圍;如果指定索引不是整數則 TypeError 會被引發。)
exception KeyError
exception KeyboardInterrupt</>復制代碼
當在現有鍵集合中找不到指定的映射(字典)鍵時將被引發。
</>復制代碼
當用戶按下中斷鍵 (通常為 Control-C 或 Delete) 時將被引發。 在執行期間,會定期檢測中斷信號。 該異常繼承自 BaseException 以確保不會被處理 Exception 的代碼意外捕獲,這樣可以避免退出解釋器。
exception MemoryError
</>復制代碼
當一個操作耗盡內存但情況仍可(通過刪除一些對象)進行挽救時將被引發。 關聯的值是一個字符串,指明是哪種(內部)操作耗盡了內存。 請注意由于底層的內存管理架構(C 的 malloc() 函數),解釋器也許并不總是能夠從這種情況下完全恢復;但它畢竟可以引發一個異常,這樣就能打印出棧回溯信息,以便找出導致問題的失控程序。
exception NameError
exception NotImplementedError</>復制代碼
當某個局部或全局名稱未找到時將被引發。 此異常僅用于非限定名稱。 關聯的值是一條錯誤信息,其中包含未找到的名稱。
</>復制代碼
此異常派生自 RuntimeError。 在用戶自定義的基類中,抽象方法應當在其要求所派生類重載該方法,或是在其要求所開發的類提示具體實現尚待添加時引發此異常。
</>復制代碼
注解它不應當用來表示一個運算符或方法根本不能被支持 -- 在此情況下應當讓特定運算符 / 方法保持未定義,或者在子類中將其設為 None。
注解
NotImplementedError 和 NotImplemented 不可互換,即使它們有相似的名稱和用途。 請參閱 NotImplemented 了解有關何時使用它們的詳細說明。
exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
</>復制代碼
此異常在一個系統函數返回系統相關的錯誤時將被引發,此類錯誤包括 I/O 操作失敗例如 "文件未找到" 或 "磁盤已滿" 等(不包括非法參數類型或其他偶然性錯誤)。
構造器的第二種形式可設置如下所述的相應屬性。 如果未指定這些屬性則默認為 None。 為了能向下兼容,如果傳入了三個參數,則 args 屬性將僅包含由前兩個構造器參數組成的 2 元組。
構造器實際返回的往往是 OSError 的某個子類,如下文 OS exceptions 中所描述的。 具體的子類取決于最終的 errno 值。 此行為僅在直接或通過別名來構造 OSError 時發生,并且在子類化時不會被繼承。
errno
winerror</>復制代碼
來自于 C 變量 errno 的數字錯誤碼。
strerror</>復制代碼
在 Windows 下,此參數將給出原生的 Windows 錯誤碼。 而 errno 屬性將是該原生錯誤碼在 POSIX 平臺下的近似轉換形式。
在 Windows 下,如果 winerror 構造器參數是一個整數,則 errno 屬性會根據 Windows 錯誤碼來確定,而 errno 參數會被忽略。 在其他平臺上,winerror 參數會被忽略,并且 winerror 屬性將不存在。
</>復制代碼
操作系統所提供的相應錯誤信息。 它在 POSIX 平臺中由 C 函數 perror() 來格式化,在 Windows 中則是由 FormatMessage()。
### filename
### filename2
</>復制代碼
對于與文件系統路徑有關 (例如 open() 或 os.unlink()) 的異常,filename 是傳給函數的文件名。 對于涉及兩個文件系統路徑的函數 (例如 os.rename()),filename2 將是傳給函數的第二個文件名。
在 3.3 版更改: EnvironmentError, IOError, WindowsError, socket.error, select.error 與 mmap.error 已被合并到 OSError,構造器可能返回其中一個子類。
在 3.4 版更改: filename 屬性現在將是傳給函數的原始文件名,而不是經過編碼或基于文件系統編碼進行解碼之后的名稱。 此外還添加了 filename2 構造器參數和屬性。
exception OverflowError
exception RecursionError</>復制代碼
當算術運算的結果大到無法表示時將被引發。 這對整數來說不可能發生(寧可引發 MemoryError 也不會放棄嘗試)。 但是出于歷史原因,有時也會在整數超出要求范圍的情況下引發 OverflowError。 因為在 C 中缺少對浮點異常處理的標準化,大多數浮點運算都不會做檢查。
</>復制代碼
此異常派生自 RuntimeError。 它會在解釋器檢測發現超過最大遞歸深度 (參見 sys.getrecursionlimit()) 時被引發。
3.5 新版功能: 在此之前將只引發 RuntimeError。
exception ReferenceError
</>復制代碼
此異常將在使用 weakref.proxy() 函數所創建的弱引用來訪問該引用的某個已被作為垃圾回收的屬性時被引發。 有關弱引用的更多信息請參閱 weakref 模塊。
exception RuntimeError
exception StopIteration</>復制代碼
當檢測到一個不歸屬于任何其他類別的錯誤時將被引發。 關聯的值是一個指明究竟發生了什么問題的字符串。
</>復制代碼
由內置函數 next() 和 iterator 的 __next__() 方法所引發,用來表示該迭代器不能產生下一項。
該異常對象只有一個屬性 value,它在構造該異常時作為參數給出,默認值為 None。
當一個 generator 或 coroutine 函數返回時,將引發一個新的 StopIteration 實例,函數返回的值將被用作異常構造器的 value 形參。
如果某個生成器代碼直接或間接地引發了 StopIteration,它會被轉換為 RuntimeError (并將 StopIteration 保留為導致新異常的原因)。
在 3.3 版更改: 添加了 value 屬性及其被生成器函數用作返回值的功能。
在 3.5 版更改: 引入了通過 from __future__ import generator_stop 來實現 RuntimeError 轉換,參見 PEP 479。
在 3.7 版更改: 默認對所有代碼啟用 PEP 479: 在生成器中引發的 StopIteration 錯誤將被轉換為 RuntimeError。
exception StopAsyncIteration
</>復制代碼
必須由一個 asynchronous iterator 對象的 __anext__() 方法來引發以停止迭代操作。
3.5 新版功能.
exception SyntaxError
</>復制代碼
當解析器遇到語法錯誤時將被引發。 這可以發生在 import 語句,對內置函數 exec() 或 eval() 的調用,或者讀取原始腳本或標準輸入(也包括交互模式)的時候。
該類的實例包含有屬性 filename, lineno, offset 和 text 用于方便地訪問相應的詳細信息。 異常實例的 str() 僅返回消息文本。
exception IndentationError
</>復制代碼
與不正確的縮進相關的語法錯誤的基類。 這是 SyntaxError 的一個子類。
exception TabError
exception SystemError</>復制代碼
當縮進包含對制表符和空格符不一致的使用時將被引發。 這是 IndentationError 的一個子類。
</>復制代碼
當解釋器發現內部錯誤,但情況看起來尚未嚴重到要放棄所有希望時將被引發。 關聯的值是一個指明發生了什么問題的字符串(表示為低層級的符號)。
你應當將此問題報告給你所用 Python 解釋器的作者或維護人員。 請確認報告 Python 解釋器的版本號 (sys.version; 它也會在交互式 Python 會話開始時被打印出來),具體的錯誤消息(異常所關聯的值)以及可能觸發該錯誤的程序源碼。
exception SystemExit
</>復制代碼
此異常由 sys.exit() 函數引發。 它繼承自 BaseException 而不是 Exception 以確保不會被處理 Exception 的代碼意外捕獲。 這允許此異常正確地向上傳播并導致解釋器退出。 如果它未被處理,則 Python 解釋器就將退出;不會打印任何棧回溯信息。 構造器接受的可選參數與傳遞給 sys.exit() 的相同。 如果該值為一個整數,則它指明系統退出狀態碼(會傳遞給 C 的 exit() 函數);如果該值為 None,則退出狀態碼為零;如果該值為其他類型(例如字符串),則會打印對象的值并將退出狀態碼設為一。
對 sys.exit() 的調用會被轉換為一個異常以便能執行清理處理程序 (try 語句的 finally 子句),并且使得調試器可以執行一段腳本而不必冒失去控制的風險。 如果絕對確實地需要立即退出(例如在調用 os.fork() 之后的子進程中)則可使用 os._exit().
code
傳給構造器的退出狀態碼或錯誤信息(默認為 None。)
exception TypeError當一個操作或函數被應用于類型不適當的對象時將被引發。 關聯的值是一個字符串,給出有關類型不匹配的詳情。
此異常可以由用戶代碼引發,以表明嘗試對某個對象進行的操作不受支持也不應當受支持。 如果某個對象應當支持給定的操作但尚未提供相應的實現,所要引發的適當異常應為 NotImplementedError。
傳入參數的類型錯誤 (例如在要求 int 時卻傳入了 list) 應當導致 TypeError,但傳入參數的值錯誤 (例如傳入要求范圍之外的數值) 則應當導致 ValueError。
exception UnboundLocalError當在函數或方法中對某個局部變量進行引用,但該變量并未綁定任何值時將被引發。 此異常是 NameError 的一個子類。
exception UnicodeError當發生與 Unicode 相關的編碼或解碼錯誤時將被引發。 此異常是 ValueError 的一個子類。
UnicodeError 具有一些描述編碼或解碼錯誤的屬性。 例如 err.object[err.start:err.end] 會給出導致編解碼器失敗的特定無效輸入。
encodingreason</>復制代碼
引發錯誤的編碼名稱。
object</>復制代碼
描述特定編解碼器錯誤的字符串。
start</>復制代碼
編解碼器試圖要編碼或解碼的對象。
</>復制代碼
object 中無效數據的開始位置索引。
end
</>復制代碼
object 中無效數據的末尾位置索引(不含)。
exception UnicodeEncodeError
exception UnicodeDecodeError</>復制代碼
當在編碼過程中發生與 Unicode 相關的錯誤時將被引發。 此異常是 UnicodeError 的一個子類。
exception UnicodeTranslateError</>復制代碼
當在解碼過程中發生與 Unicode 相關的錯誤時將被引發。 此異常是 UnicodeError 的一個子類。
exception ValueError</>復制代碼
在轉寫過程中發生與 Unicode 相關的錯誤時將被引發。 此異常是 UnicodeError 的一個子類。
當操作或函數接收到具有正確類型但值不適合的參數,并且情況不能用更精確的異常例如 IndexError 來描述時將被引發。
exception ZeroDivisionError</>復制代碼
當除法或取余運算的第二個參數為零時將被引發。 關聯的值是一個字符串,指明操作數和運算的類型。
下列異常被保留以與之前的版本相兼容;從 Python 3.3 開始,它們都是 OSError 的別名。
exception EnvironmentError exception IOError exception WindowsErrorOS 異常</>復制代碼
限在 Windows 中可用。
下列異常均為 OSError 的子類,它們將根據系統錯誤代碼被引發。
exception BlockingIOError</>復制代碼
當一個操作會被某個設置為非阻塞操作的對象(例如套接字)所阻塞時將被引發。 對應于 errno EAGAIN, EALREADY, EWOULDBLOCK 和 EINPROGRESS。
除了 OSError 已有的屬性,BlockingIOError 還有一個額外屬性:
characters_written
一個整數,表示在被阻塞前已寫入到流的字符數。 當使用來自 io 模塊的帶緩沖 I/O 類時此屬性可用。
exception ChildProcessErrorexception ConnectionError</>復制代碼
當一個子進程上的操作失敗時將被引發。 對應于 errno ECHILD。
exception BrokenPipeError</>復制代碼
與連接相關問題的基類。
其子類有 BrokenPipeError, ConnectionAbortedError, ConnectionRefusedError 和 ConnectionResetError。
</>復制代碼
ConnectionError 的子類,當試圖寫入另一端已被關閉的管道,或是試圖寫入已關閉寫入的套接字時將被引發。 對應于 errno EPIPE 和 ESHUTDOWN。
exception ConnectionAbortedError
</>復制代碼
ConnectionError 的子類,當連接嘗試被對端中止時將被引發。 對應于 errno ECONNABORTED。
exception ConnectionRefusedError
</>復制代碼
ConnectionError 的子類,當連接嘗試被對端拒絕時將被引發。 對應于 errno ECONNREFUSED。
exception ConnectionResetError
</>復制代碼
ConnectionError 的子類,當連接被對端重置時將被引發。 對應于 errno ECONNRESET。
exception FileExistsError
exception FileNotFoundError</>復制代碼
當試圖創建一個已存在的文件或目錄時將被引發。 對應于 errno EEXIST。
exception InterruptedError</>復制代碼
當所請求的文件或目錄不存在時將被引發。 對應于 errno ENOENT。
</>復制代碼
當系統調用被輸入信號中斷時將被引發。 對應于 errno EINTR。
在 3.5 版更改: 當系統調用被某個信號中斷時,Python 現在會重試系統調用,除非該信號的處理程序引發了其它異常 (原理參見 PEP 475) 而不是引發 InterruptedError。
exception IsADirectoryError
</>復制代碼
當請求對一個目錄執行文件操作 (例如 os.remove()) 將被引發。 對應于 errno EISDIR。
exception NotADirectoryError
</>復制代碼
當請求對一個非目錄對象執行目錄操作 (例如 os.listdir()) 時將被引發。 對應于 errno ENOTDIR。
exception PermissionError
exception ProcessLookupError</>復制代碼
當在沒有足夠操作權限的情況下試圖執行某個操作時將被引發 —— 例如缺少文件系統權限。 對應于 errno EACCES 和 EPERM。
exception TimeoutError</>復制代碼
當給定的進程不存在時將被引發。 對應于 errno ESRCH。
</>復制代碼
當一個系統函數發生系統級超時的情況下將被引發。 對應于 errno ETIMEDOUT。
3.3 新版功能: 添加了以上所有 OSError 的子類。
參見
PEP 3151 - 重寫 OS 和 IO 異常的層次結構
警告下列異常被用作警告類別;請參閱 警告類別 文檔了解詳情。
exception Warningexception UserWarning</>復制代碼
警告類別的基類。
exception DeprecationWarning</>復制代碼
用戶代碼所產生警告的基類。
exception PendingDeprecationWarning</>復制代碼
如果所發出的警告是針對其他 Python 開發者的,則以此作為與已棄用特性相關警告的基類。
exception SyntaxWarning</>復制代碼
對于已過時并預計在未來棄用,但目前尚未棄用的特性相關警告的基類。
這個類很少被使用,因為針對未來可能的棄用發出警告的做法并不常見,而針對當前已有的棄用則推薦使用 DeprecationWarning。
exception RuntimeWarning</>復制代碼
與模糊的語法相關的警告的基類。
exception FutureWarning</>復制代碼
與模糊的運行時行為相關的警告的基類。
exception ImportWarning</>復制代碼
如果所發出的警告是針對以 Python 所編寫應用的最終用戶的,則以此作為與已棄用特性相關警告的基類。
exception UnicodeWarning</>復制代碼
與在模塊導入中可能的錯誤相關的警告的基類。
exception BytesWarning</>復制代碼
與 Unicode 相關的警告的基類。
exception ResourceWarning</>復制代碼
與 bytes 和 bytearray 相關的警告的基類。
</>復制代碼
與資源使用相關的警告的基類。 會被默認的警告過濾器忽略。
3.2 新版功能.
異常層次結構
內置異常的類層級結構如下:
</>復制代碼
上一篇文章:Python標準庫---16、內置類型:上下文管理器類型、其他、特殊屬性
下一篇文章:Python標準庫---18、文本處理服務:string 常見的字符串操作
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44007.html
摘要:退出運行時上下文并返回一個布爾值旗標來表明所發生的任何異常是否應當被屏蔽。除了實現上下文管理協議以外,不同類型不會被特殊處理。其中一些并不會被內置函數所列出。 上一篇文章:Python標準庫---15、內置類型:集合類型、映射類型下一篇文章:Python標準庫---17、內置異常 上下文管理器類型 Python 的 with 語句支持通過上下文管理器所定義的運行時上下文這一概念。 此...
摘要:如果對象允許,該函數將刪除指定的屬性。返回值為表達式求值的結果。語法錯誤將作為異常被報告。該函數返回值是。例如數字類型描述了浮點類型。將轉換為控制的格式化表示。上一篇文章標準庫內置函數下一篇文章標準庫內置函數 上一篇文章:Python標準庫---1、內置函數(A-B-C)下一篇文章:Python標準庫---3、內置函數(G-H-I-J-K) 內置函數: showImg(https:/...
摘要:下一篇文章標準庫內置函數標準庫語言參考描述了語言的具體語法和語義,這份庫參考則介紹了與一同發行的標準庫。這個庫也包含了內置函數和異常不需要語句就可以在所有代碼中使用的對象。下一篇文章標準庫內置函數 下一篇文章:Python標準庫---1、內置函數 Python 標準庫 Python 語言參考 描述了 Python 語言的具體語法和語義,這份庫參考則介紹了與 Python 一同發行的標...
摘要:上一篇文章標準庫內置函數下一篇文章標準庫內置函數內置函數返回對象命名屬性的值。返回表示當前全局符號表的字典。例如,從二進制數據庫文件中讀取固定寬度的塊,直至到達文件的末尾上一篇文章標準庫內置函數下一篇文章標準庫內置函數 上一篇文章:Python標準庫---2、內置函數(D-E-F)下一篇文章:Python標準庫---4、內置函數(L-M-N-O) 內置函數: showImg(http...
摘要:上一篇文章標準庫內置函數下一篇文章標準庫內置類型邏輯值檢測布爾運算比較內置常量有少數的常量存在于內置命名空間中。給賦值是非法的并會引發。如果所有嘗試都返回,則解釋器將引發適當的異常。如果沒有以選項啟動,則此常量為真值。 上一篇文章:Python標準庫---7、內置函數(V-W-X-Y-Z)下一篇文章:Python標準庫---9、內置類型:邏輯值檢測、布爾運算、比較 內置常量 有少數的...
閱讀 1408·2021-09-02 09:53
閱讀 2672·2021-07-29 13:50
閱讀 1720·2019-08-30 11:07
閱讀 1575·2019-08-30 11:00
閱讀 1456·2019-08-29 14:00
閱讀 1851·2019-08-29 12:52
閱讀 2567·2019-08-29 11:11
閱讀 3425·2019-08-26 12:23