python 3.6.3 異常


在Python中,所有異常都必須是派生類的實例 BaseExceptiontry同一個聲明中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

對於那些內置異常的基類時引發的各種算術錯誤:OverflowErrorZeroDivisionError, FloatingPointError

異常 BufferError

無法執行緩沖區相關操作時引發

異常 LookupError

用於當一個鍵或索引上的映射或序列中使用所提出的異常的基類是無效的:IndexErrorKeyError這可以直接提出來codecs.lookup()

5.2。具體例外

以下異常是通常引發的異常。

異常 AssertionError

assert聲明失敗時提起

異常 AttributeError

屬性引用(請參閱屬性引用)或賦值失敗時引發(當一個對象根本不支持屬性引用或屬性賦值時,會TypeError被提出。)

異常 EOFError

input()函數達到文件結束條件(EOF)而不讀取任何數據引發。(注:在io.IOBase.read()和 io.IOBase.readline()方法時,他們打EOF返回一個空字符串。)

異常 FloatingPointError

浮點運算失敗時觸發。這個異常總是定義的,但是只有當Python配置了該--with-fpectl選項,或者WANT_SIGFPE_HANDLERpyconfig.h文件中定義符號時,才能引發這種異常 

異常 GeneratorExit

發電機協調組合關閉時提起看到generator.close()coroutine.close()它直接繼承BaseException而不是,Exception因為它在技術上不是錯誤。

異常 ImportError

import語句在嘗試加載模塊時出現問題。當“從列表”中 有一個名稱不能找到時,也會引發from ... import

namepath屬性可以只使用關鍵字參數的構造函數中設置。當設置它們分別表示嘗試導入的模塊的名稱和觸發異常的任何文件的路徑。

在版本3.3中更改:添加namepath屬性。

異常 ModuleNotFoundError

當一個模塊無法找到時ImportError它的一個子類被引發importNone 發現時也被提出sys.modules

3.6版新功能

異常 IndexError

當序列下標超出范圍時引發。(切片索引被靜默地截斷以落在允許范圍內;如果索引不是整數,TypeError則會被提升。)

異常 KeyError

當在現有密鑰集中找不到映射(字典)鍵時引發。

異常 KeyboardInterrupt

當用戶點擊中斷鍵(正常Control-C或 Delete時觸發在執行期間,定期檢查中斷。異常繼承BaseException而不被意外地捕獲Exception並因此阻止解釋器退出的代碼被捕獲

異常 MemoryError

當操作內存不足時提起,但情況可能仍然會被搶救(通過刪除某些對象)。相關聯的值是一個字符串,指示哪種(內部)操作在內存中運行。請注意,由於底層內存管理架構(C的malloc()功能),解釋器可能並不總是能夠從這種情況中完全恢復; 但是它引發了一個異常,以便可以打印堆棧追溯,以防萬一出現程序的原因。

異常 NameError

當找不到本地或全球名稱時引發。這僅適用於不合格的名稱。關聯值是包含無法找到的名稱的錯誤消息。

異常 NotImplementedError

這個異常來源於RuntimeError在用戶定義的基類中,抽象方法應該引發此異常,當它們需要派生類來覆蓋該方法時,或者正在開發類來指示實際實現仍需要添加。

注意

 

它不應該被用來表示一個操作符或者方法並不意味着被支持 - 在這種情況下,要么將操作符/方法定義為未定義,要么將子類設置為None

注意

 

NotImplementedErrorNotImplemented不能互換,即使他們有相似的名稱和用途。查看 NotImplemented有關何時使用的詳細信息。

異常 OSError arg 
異常 OSError errnostrerror [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()POSIX FormatMessage() 下的C函數Windows 下的格式化

filename
filename2

對於涉及文件系統路徑(例如open()或 os.unlink())的異常filename是傳遞給該函數的文件名。對於涉及兩個文件系統路徑(如 os.rename())的功能,filename2對應於傳遞給該函數的第二個文件名。

改變在3.3版:EnvironmentErrorIOErrorWindowsError, socket.errorselect.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()閱讀初始腳本或標准輸入(也交互)時,或。

這個類的實例有屬性filenamelineno, 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

當操作將阻止設置為非阻塞操作的對象(例如套接字)時觸發。對應於errno EAGAINEALREADY, EWOULDBLOCKEINPROGRESS

除了那些OSErrorBlockingIOError可以有一個屬性:

characters_written

一個整數,包含在阻塞之前寫入流的字符數。使用io模塊中緩沖的I / O類時,此屬性可用

異常 ChildProcessError

當對子進程的操作失敗時引發。對應errno ECHILD

異常 ConnectionError

連接相關問題的基礎類。

子類是BrokenPipeErrorConnectionAbortedError, ConnectionRefusedErrorConnectionResetError

異常 BrokenPipeError

的一個子類ConnectionError嘗試,而另一端已經關閉管道上寫的時候,或者嘗試這已經寫入關閉套接字上寫,提高。對應於errno EPIPEESHUTDOWN

異常 ConnectionAbortedError

ConnectionError當對等體中止連接嘗試時,引發的一個子類對應errno ECONNABORTED

異常 ConnectionRefusedError

ConnectionError連接嘗試被對等體拒絕時引發的一個子類對應errno ECONNREFUSED

異常 ConnectionResetError

ConnectionError當對等體重置連接時,引發的子類對應errno ECONNRESET

異常 FileExistsError

在嘗試創建已存在的文件或目錄時引發。對應errno EEXIST

異常 FileNotFoundError

當請求文件或目錄但不存在時引發。對應errno ENOENT

異常 InterruptedError

當系統呼叫被輸入信號中斷時觸發。對應errno EINTR

在版本3.5中更改:當系統調用信號中斷時,Python會重試系統調用,除非信號處理程序引發異常(請參閱PEP 475 為理由),而不是提高InterruptedError

異常 IsADirectoryError

os.remove()在目錄上請求文件操作(如時引發對應errno EISDIR

異常 NotADirectoryError

os.listdir()對不是目錄的東西請求目錄操作(如時引發對應errno ENOTDIR

異常 PermissionError

當嘗試運行沒有足夠訪問權限的操作(例如文件系統權限)時引發。對應於errno EACCESEPERM

異常 ProcessLookupError

當給定的進程不存在時提起。對應errno ESRCH

異常 TimeoutError

當系統功能在系統級別超時時引發。對應errno ETIMEDOUT

3.3版本中的新功能:OSError添加了上述所有子類。

也可以看看

 

PEP 3151 - 重新編寫OS和IO異常層次結構

5.3。警告

以下例外被用作警告類別; warnings 有關詳細信息,請參閱該模塊。

異常 Warning

警告類別的基類。

異常 UserWarning

用戶代碼生成的警告的基類。

異常 DeprecationWarning

關於已棄用功能的警告的基類。

異常 PendingDeprecationWarning

關於將來不推薦使用的功能的警告的基類。

異常 SyntaxWarning

關於可疑語法的警告的基類。

異常 RuntimeWarning

關於可疑運行時行為的警告的基類。

異常 FutureWarning

關於將來會在語義上改變的構造的警告的基類。

異常 ImportWarning

關於模塊進口中可能出現的錯誤的警告的基礎類。

異常 UnicodeWarning

與Unicode相關的警告的基類。

異常 BytesWarning

基礎類相關的警告bytesbytearray

異常 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM