在Python中,所有異常都必須是派生類的實例 BaseException。在try同一個聲明中except 說提到一類特殊條款,該條款還處理來自類(從中但也不例外類派生的任何異常類它派生)。通過子類化不相關的兩個異常類永遠不是等效的,即使它們具有相同的名稱。
下面列出的內置異常可以由解釋器或內置函數生成。除非提及,否則它們具有指示錯誤的詳細原因的“關聯值”。這可以是幾個信息項的字符串或元組(例如,錯誤代碼和解釋代碼的字符串)。關聯值通常作為參數傳遞給異常類的構造函數。
用戶代碼可以引發內置異常。這可以用於測試異常處理程序或報告錯誤條件“就像”解釋器引發相同異常的情況; 但請注意,沒有任何可以防止用戶代碼提出不正確的錯誤。
內置的異常類可以被子類化以定義新的異常; 鼓勵程序員從Exception 類或其子類之一導出新的異常,而不是從BaseException。有關定義異常的更多信息,請參見Python Tutorial中 用戶定義的異常。
當提高(或重新提高)exceptor finally子句中 的異常時,__context__會自動設置為捕獲的最后一個異常; 如果未處理新的異常,則最終顯示的追溯將包括始發異常和最終異常。
當提升一個新的異常(而不是使用裸raise重新提高目前正在處理的異常),隱含的例外情況下可以通過使用補充有明確的病因from有 raise:
提高 new_exc 從 original_exc
以下表達式from必須是異常或None。它將被設置為__cause__例外。設置 __cause__也隱式設置__suppress_context__ 屬性True,因此使用 有效地用於顯示目的的新的(例如,將取代舊的例外來,同時保留現有的舊的例外內省調試時。raise new_exc from NoneKeyErrorAttributeError__context__
除了異常本身的追溯之外,缺省回溯顯示代碼還顯示了這些鏈接異常。一個顯式鏈接的異常在__cause__存在時總是顯示。一個隱式鏈接的異常__context__只有在__cause__ is None和__suppress_context__false時顯示。
在任何一種情況下,異常本身總是在任何鏈接異常之后顯示,以便traceback的最后一行始終顯示最后一個引發的異常。
5.1。基類
以下異常主要用作其他異常的基類。
-
異常
BaseException -
所有內置異常的基類。它不是直接由用戶定義的類繼承(為此使用
Exception)。如果str()在此類的實例上被調用,則返回實例的參數的表示形式,或者當沒有參數時,返回空字符串。-
args -
給異常構造函數的參數元組。一些內置異常(如
OSError)期望一定數量的參數,並為此元組的元素分配一個特殊的含義,而其他異常通常僅使用單個字符串給出錯誤消息。
-
with_traceback(tb ) -
此方法將tb設置為異常的新追溯,並返回異常對象。它通常用於異常處理代碼,如下所示:
try : ... except SomeException : tb = sys 。exc_info ()[ 2 ] raise OtherException (... )。with_traceback (tb )
-
-
異常
Exception -
所有內置的非系統退出的異常都是從這個類派生出來的。所有用戶定義的異常也應該從此類派生。
-
異常
ArithmeticError -
對於那些內置異常的基類時引發的各種算術錯誤:
OverflowError,ZeroDivisionError,FloatingPointError。
-
異常
BufferError -
當無法執行緩沖區相關操作時引發。
-
異常
LookupError -
用於當一個鍵或索引上的映射或序列中使用所提出的異常的基類是無效的:
IndexError,KeyError。這可以直接提出來codecs.lookup()。
5.2。具體例外
以下異常是通常引發的異常。
-
異常
AssertionError -
當
assert聲明失敗時提起。
-
異常
EOFError -
當
input()函數達到文件結束條件(EOF)而不讀取任何數據時引發。(注:在io.IOBase.read()和io.IOBase.readline()方法時,他們打EOF返回一個空字符串。)
-
異常
FloatingPointError -
浮點運算失敗時觸發。這個異常總是定義的,但是只有當Python配置了該
--with-fpectl選項,或者WANT_SIGFPE_HANDLER在pyconfig.h文件中定義了符號時,才能引發這種異常 。
-
異常
GeneratorExit -
當發電機或協調組合關閉時提起; 看到
generator.close()和coroutine.close()。它直接繼承BaseException而不是,Exception因為它在技術上不是錯誤。
-
異常
ImportError -
當
import語句在嘗試加載模塊時出現問題。當“從列表”中 有一個名稱不能找到時,也會引發。from ... import該
name和path屬性可以只使用關鍵字參數的構造函數中設置。當設置它們分別表示嘗試導入的模塊的名稱和觸發異常的任何文件的路徑。在版本3.3中更改:添加
name和path屬性。
-
異常
ModuleNotFoundError -
當一個模塊無法找到時,
ImportError它的一個子類被引發import。None發現時也被提出sys.modules。3.6版新功能
-
異常
IndexError -
當序列下標超出范圍時引發。(切片索引被靜默地截斷以落在允許范圍內;如果索引不是整數,
TypeError則會被提升。)
-
異常
KeyError -
當在現有密鑰集中找不到映射(字典)鍵時引發。
-
異常
KeyboardInterrupt -
當用戶點擊中斷鍵(正常
Control-C或Delete)時觸發。在執行期間,定期檢查中斷。異常繼承BaseException而不被意外地捕獲Exception並因此阻止解釋器退出的代碼被捕獲。
-
異常
MemoryError -
當操作內存不足時提起,但情況可能仍然會被搶救(通過刪除某些對象)。相關聯的值是一個字符串,指示哪種(內部)操作在內存中運行。請注意,由於底層內存管理架構(C的
malloc()功能),解釋器可能並不總是能夠從這種情況中完全恢復; 但是它引發了一個異常,以便可以打印堆棧追溯,以防萬一出現程序的原因。
-
異常
NameError -
當找不到本地或全球名稱時引發。這僅適用於不合格的名稱。關聯值是包含無法找到的名稱的錯誤消息。
-
異常
NotImplementedError -
這個異常來源於
RuntimeError。在用戶定義的基類中,抽象方法應該引發此異常,當它們需要派生類來覆蓋該方法時,或者正在開發類來指示實際實現仍需要添加。注意
它不應該被用來表示一個操作符或者方法並不意味着被支持 - 在這種情況下,要么將操作符/方法定義為未定義,要么將子類設置為
None。注意
NotImplementedError和NotImplemented不能互換,即使他們有相似的名稱和用途。查看NotImplemented有關何時使用的詳細信息。
-
異常
OSError([ arg ] ) -
異常
OSError(errno,strerror [,filename [,winerror [,filename2 ] ] ] ) -
當系統函數返回與系統相關的錯誤(包括I / O失敗,如“未找到文件”或“磁盤已滿”)(不是非法參數類型或其他偶然錯誤)時,會引發異常。
構造函數的第二種形式設置相應的屬性,如下所述。屬性默認為
None未指定。為了向后兼容,如果傳遞了三個參數,則該args屬性僅包含前兩個構造函數參數的2元組。構造函數通常實際上返回一個子類
OSError,如下面的操作系統異常所述。特定子類取決於最終errno值。此行為僅在OSError直接構建或通過別名構建時發生,並且在子類化時不會繼承。-
errno -
來自C變量的數字錯誤代碼
errno。
-
winerror -
在Windows下,這將為您提供本機Windows錯誤代碼。
errno然后,該屬性是POSIX術語中的本機錯誤代碼的近似翻譯。在Windows下,如果winerror構造函數參數是整數,則該
errno屬性是從Windows錯誤代碼中確定的,並且errno參數被忽略。在其他平台上, winerror參數被忽略,該winerror屬性不存在。
-
strerror -
相應的錯誤信息,由操作系統提供。它通過
perror()POSIXFormatMessage()下的C函數和Windows 下的格式化。
-
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構造函數參數和屬性。 -
-
異常
OverflowError -
當算術運算的結果太大而不能被表示時提升。整數不會發生(寧可
MemoryError放棄放棄)。但是,由於歷史原因,有時會針對超出所需范圍的整數引發OverflowError。由於C中浮點異常處理缺乏標准化,因此大多數浮點運算都不會被檢查。
-
異常
RecursionError -
這個異常來源於
RuntimeError。當解釋器檢測到sys.getrecursionlimit()超出最大遞歸深度(見)時,它會被提升 。3.5版中的新功能:以前,一個平原
RuntimeError被提出來了。
-
異常
ReferenceError -
當由
weakref.proxy()函數創建的弱引用代理被用於在垃圾回收后訪問引用對象的屬性時引發此異常 。有關弱引用的更多信息,請參閱weakref模塊。
-
異常
RuntimeError -
當檢測到不屬於任何其他類別的錯誤時觸發。相關聯的值是一個字符串,表示正確的錯誤。
-
異常
StopIteration -
通過內置函數
next()和迭代器的__next__()方法來提示迭代器沒有產生更多的項目。異常對象具有單個屬性
value,在構造異常時作為參數給出,默認為None。當一個生成器或協同函數返回時,
StopIteration會引發一個新的實例,函數返回的值被用作value異常構造函數的 參數。如果在一個指令存在的情況下定義了一個生成器函數,它將被轉換為(保留 為新異常的原因)。
from __future__ import generator_stopStopIterationRuntimeErrorStopIteration在版本3.3中更改:添加
value屬性和生成器函數使用它返回值的能力。在版本3.5中更改:引入了RuntimeError轉換。
-
異常
StopAsyncIteration -
必須通過異步迭代器對象的
__anext__()方法 來引發,以停止迭代。3.5版新功能。
-
異常
SyntaxError -
當解析器遇到語法錯誤時引發。這可能發生在一個
import聲明,調用內置的功能exec()或eval()閱讀初始腳本或標准輸入(也交互)時,或。這個類的實例有屬性
filename,lineno,offset並且text為的細節更容易獲得。str()的異常實例僅返回消息。
-
異常
IndentationError -
與錯誤縮進相關的語法錯誤的基類。這是一個子類
SyntaxError。
-
異常
TabError -
縮進時引發的標簽和空格不一致。這是一個子類
IndentationError。
-
異常
SystemError -
當翻譯發現內部錯誤時,提出了這種情況,但情況並不那么嚴重,導致它放棄了所有的希望。相關聯的值是一個字符串,指示出現什么問題(低級別)。
您應該將其報告給Python解釋器的作者或維護者。請確保報告Python解釋器的版本(
sys.version它也是在交互式Python會話開始時打印的),確切的錯誤消息(異常相關聯的值)以及觸發錯誤的程序源可能的可能。
-
異常
SystemExit -
這個異常是由
sys.exit()函數引起的。它繼承BaseException而不是Exception被偶然捕獲的代碼所捕獲Exception。這允許異常正常傳播並導致解釋器退出。當它不被處理時,Python解釋器退出; 不打印堆棧追溯。構造函數接受傳遞給的相同的可選參數sys.exit()。如果值為整數,則指定系統退出狀態(傳遞給C的exit()函數); 如果是None,退出狀態為零; 如果它有另一種類型(如字符串),則打印對象的值,退出狀態為一。調用
sys.exit()被轉換為異常,以便可以執行清理處理程序(finally語句的子句try),以便調試器可以執行腳本而不會失去控制的風險。os._exit()如果絕對有必要立即退出(例如,在調用后的子進程中os.fork()),則可以使用該功能。-
code -
傳遞給構造函數的退出狀態或錯誤消息。(默認為
None。)
-
-
異常
TypeError -
當操作或功能應用於不適當類型的對象時提起。關聯值是一個字符串,提供有關類型不匹配的詳細信息。
用戶代碼可能引發此異常,以指示對對象的嘗試操作不受支持,並不意味着。如果一個對象意在支持一個給定的操作,但還沒有提供一個實現,
NotImplementedError那么正確的例外就是加注。錯誤類型的傳遞參數(例如傳遞
list一個時int,預計)應導致TypeError,但錯誤的值傳遞參數(例如一個號碼外預期邊界)應導致ValueError。
-
異常
UnboundLocalError -
當引用函數或方法中的局部變量引用時,但沒有值綁定到該變量。這是一個子類
NameError。
-
異常
UnicodeError -
當與Unicode相關的編碼或解碼錯誤發生時引發。它是一個子類
ValueError。UnicodeError具有描述編碼或解碼錯誤的屬性。例如,err.object[err.start:err.end]給出編解碼器失敗的特定無效輸入。-
encoding -
引起錯誤的編碼的名稱。
-
reason -
描述特定編解碼器錯誤的字符串。
-
object -
編解碼器試圖進行編碼或解碼的對象。
-
start -
第一個無效數據索引
object。
-
end -
上次無效數據后的索引
object。
-
-
異常
UnicodeEncodeError -
在編碼時發生Unicode相關錯誤時引發。它是一個子類
UnicodeError。
-
異常
UnicodeDecodeError -
在解碼過程中發生Unicode相關錯誤時引發。它是一個子類
UnicodeError。
-
異常
UnicodeTranslateError -
在翻譯期間發生Unicode相關錯誤時引發。它是一個子類
UnicodeError。
-
異常
ValueError -
當內置操作或函數接收到具有正確類型但不正確值的參數時引發,並且情況未被更精確的異常描述,例如
IndexError。
-
異常
ZeroDivisionError -
當分割或模運算的第二個參數為零時提升。關聯值是指示操作數類型和操作的字符串。
保留與以前版本兼容的以下例外:從Python 3.3開始,它們是別名OSError。
-
異常
EnvironmentError
-
異常
IOError
-
異常
WindowsError -
僅在Windows上可用。
5.2.1。操作系統異常
以下異常是子類OSError,它們會根據系統錯誤代碼引發。
-
異常
BlockingIOError -
當操作將阻止設置為非阻塞操作的對象(例如套接字)時觸發。對應於
errnoEAGAIN,EALREADY,EWOULDBLOCK和EINPROGRESS。除了那些
OSError,BlockingIOError可以有一個屬性:-
characters_written -
一個整數,包含在阻塞之前寫入流的字符數。使用
io模塊中緩沖的I / O類時,此屬性可用。
-
-
異常
ChildProcessError -
當對子進程的操作失敗時引發。對應
errnoECHILD。
-
異常
ConnectionError -
連接相關問題的基礎類。
子類是
BrokenPipeError,ConnectionAbortedError,ConnectionRefusedError和ConnectionResetError。
-
異常
BrokenPipeError -
的一個子類
ConnectionError嘗試,而另一端已經關閉管道上寫的時候,或者嘗試這已經寫入關閉套接字上寫,提高。對應於errnoEPIPE和ESHUTDOWN。
-
異常
ConnectionAbortedError -
ConnectionError當對等體中止連接嘗試時,引發的一個子類。對應errnoECONNABORTED。
-
異常
ConnectionRefusedError -
ConnectionError連接嘗試被對等體拒絕時引發的一個子類。對應errnoECONNREFUSED。
-
異常
ConnectionResetError -
ConnectionError當對等體重置連接時,引發的子類。對應errnoECONNRESET。
-
異常
FileExistsError -
在嘗試創建已存在的文件或目錄時引發。對應
errnoEEXIST。
-
異常
FileNotFoundError -
當請求文件或目錄但不存在時引發。對應
errnoENOENT。
-
異常
InterruptedError -
當系統呼叫被輸入信號中斷時觸發。對應
errnoEINTR。在版本3.5中更改:當系統調用信號中斷時,Python會重試系統調用,除非信號處理程序引發異常(請參閱PEP 475 為理由),而不是提高
InterruptedError。
-
異常
IsADirectoryError -
當
os.remove()在目錄上請求文件操作(如)時引發。對應errnoEISDIR。
-
異常
NotADirectoryError -
當
os.listdir()對不是目錄的東西請求目錄操作(如)時引發。對應errnoENOTDIR。
-
異常
PermissionError -
當嘗試運行沒有足夠訪問權限的操作(例如文件系統權限)時引發。對應於
errnoEACCES和EPERM。
-
異常
ProcessLookupError -
當給定的進程不存在時提起。對應
errnoESRCH。
-
異常
TimeoutError -
當系統功能在系統級別超時時引發。對應
errnoETIMEDOUT。
3.3版本中的新功能:OSError添加了上述所有子類。
也可以看看
PEP 3151 - 重新編寫OS和IO異常層次結構
5.3。警告
以下例外被用作警告類別; warnings 有關詳細信息,請參閱該模塊。
-
異常
Warning -
警告類別的基類。
-
異常
UserWarning -
用戶代碼生成的警告的基類。
-
異常
DeprecationWarning -
關於已棄用功能的警告的基類。
-
異常
PendingDeprecationWarning -
關於將來不推薦使用的功能的警告的基類。
-
異常
SyntaxWarning -
關於可疑語法的警告的基類。
-
異常
RuntimeWarning -
關於可疑運行時行為的警告的基類。
-
異常
FutureWarning -
關於將來會在語義上改變的構造的警告的基類。
-
異常
ImportWarning -
關於模塊進口中可能出現的錯誤的警告的基礎類。
-
異常
UnicodeWarning -
與Unicode相關的警告的基類。
-
異常
ResourceWarning -
與資源使用相關的警告的基類。
版本3.2中的新功能。
5.4。異常層次
內置異常的類層次結構是:
BaseException
+ - SystemExit + - KeyboardInterrupt + - GeneratorExit + - 異常 + - 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
