做自(zì)由與創造的先行者

内置例外(wài) | Built-in Exceptions

Python開(kāi)發手冊

異常應該是類對(duì)象。異常在模塊中定義exceptions。這(zhè)個模塊永遠不需要顯式導入:在内置的命名空(kōng)間和(hé)exceptions模塊中都提供了(le)異常。

對(duì)于類異常,在try帶有except提及特定類的子句的語句中,該子句還處理(lǐ)從(cóng)該類派生的任何異常類(但(dàn)不包括派生它的異常類)。兩個不通過子類關聯的異常類永遠不會(huì)相同,即使它們具有相同的名稱。

下(xià)面列出的内置例外(wài)可以由解釋器或内置函數生成。除了(le)提到(dào)的地方,它們有一個“關聯值”,表示錯誤的詳細原因。這(zhè)可能(néng)是一個包含多項信息的字符串或元組(例如,錯誤代碼和(hé)解釋代碼的字符串)。關聯的值是raise語句的第二個參數。如果異常類是從(cóng)标準根類派生的BaseException,則關聯值将作(zuò)爲異常實例的args屬性出現(xiàn)。

用(yòng)戶代碼可以引發内置的異常。這(zhè)可用(yòng)于測試異常處理(lǐ)程序或報(bào)告錯誤情況,“就像”解釋程序引發相同異常的情況一樣; 但(dàn)要注意,沒有什(shén)麽可以防止用(yòng)戶代碼引發不适當的錯誤。

内置的異常類可以被分類以定義新的異常; 鼓勵程序員從(cóng)Exception類或它的一個子類派生新的異常,而不是從(cóng)中派生BaseException。有關定義異常的更多信息,請(qǐng)參見Python教程中用(yòng)戶定義的例外(wài)。

以下(xià)例外(wài)僅用(yòng)作(zuò)其他(tā)例外(wài)的基類。

exception BaseException

所有内置異常的基類。它并不意味着被用(yòng)戶定義的類直接繼承(爲此,使用(yòng)Exception)。如果對(duì)此類的實例調用(yòng)str()or unicode(),則返回實例參數的表示形式,如果沒有參數,則返回空(kōng)字符串。

2.5版本中的新功能(néng)。

args

賦給異常構造函數的參數元組。一些(xiē)内置的異常(例如IOError)會(huì)期望一定數量的參數并爲這(zhè)個元組賦予特殊的含義,而另一些(xiē)内置異常通常隻用(yòng)一個字符串來(lái)調用(yòng),從(cóng)而給出錯誤消息。

exception Exception

所有内置的,非系統退出的異常都源自(zì)這(zhè)個類。所有用(yòng)戶定義的異常也(yě)應該從(cóng)這(zhè)個類派生。

在版本2.5中更改:更改爲從(cóng)中繼承BaseException。

exception StandardError

該基類除了(le)所有内置例外(wài)StopIteration,GeneratorExit,KeyboardInterrupt和(hé)SystemExit。StandardError本身來(lái)源于Exception。

exception ArithmeticError

對(duì)于那些(xiē)内置異常的基類時(shí)引發的各種算(suàn)術錯誤:OverflowError,ZeroDivisionError,FloatingPointError。

exception BufferError

當無法執行緩沖區(qū)相關操作(zuò)時(shí)引發。

exception LookupError

在映射或序列上(shàng)使用(yòng)的鍵或索引無效時(shí)引發異常的基類:IndexError,KeyError。這(zhè)可以直接通過codecs.lookup()。

exception EnvironmentError

可以在Python系統之外(wài)發生的異常的基類:IOError,OSError。當使用(yòng)2元組創建此類型的異常時(shí),第一個項目可用(yòng)于實例的errno屬性(假定爲錯誤号),第二個項目在strerror屬性上(shàng)可用(yòng)(通常是關聯的錯誤消息)。該元組本身也(yě)可用(yòng)于該args屬性。

1.5.2版本的新功能(néng)。

當EnvironmentError用(yòng)三元組實例化一個異常時(shí),前兩個項目如上(shàng)所述可用(yòng),而第三個項目可用(yòng)于該filename屬性。但(dàn)是,爲了(le)向後兼容,該args屬性隻包含前兩個構造函數參數的2元組。

這(zhè)個filename屬性是None當這(zhè)個異常是用(yòng)3個以外(wài)的參數創建的。的errno和(hé)strerror屬性也(yě)None當實例與其他(tā)大(dà)于2個或3個參數創建。在這(zhè)最後一種情況下(xià),args将逐字構造函數參數作(zuò)爲元組包含在内。

以下(xià)例外(wài)是實際引發的例外(wài)情況。

exception AssertionError

當一個assert陳述失敗時(shí)引發。

exception AttributeError

當屬性引用(yòng)(請(qǐng)參閱屬性引用(yòng))或分配失敗時(shí)引發。(當一個對(duì)象根本不支持屬性引用(yòng)或屬性賦值時(shí),TypeError會(huì)引發。)

exception EOFError

當其中一個内置函數(input()或raw_input())在沒有讀取任何數據的情況下(xià)碰到(dào)文(wén)件結束條件(EOF)時(shí)引發。(注意:當方法碰到(dào)EOF時(shí)file.read(),file.readline()方法會(huì)返回一個空(kōng)字符串。)

exception FloatingPointError

當浮點操作(zuò)失敗時(shí)引發。這(zhè)個異常總是被定義的,但(dàn)是隻能(néng)在Python配置了(le)--with-fpectl選項或者文(wén)件中WANT_SIGFPE_HANDLER定義了(le)符号時(shí)才會(huì)引發pyconfig.h。

exception GeneratorExit

當調用(yòng)生成器的close()方法時(shí)引發。它直接繼承BaseException而不是StandardError因爲它在技術上(shàng)不是一個錯誤。

2.5版本中的新功能(néng)。

版本2.6中更改:更改爲繼承BaseException。

exception IOError

當I / O操作(zuò)(例如print語句,内置open()函數或文(wén)件對(duì)象的方法)因I / O相關原因(例如,“找不到(dào)文(wén)件”或“磁盤已滿”)而失敗時(shí)引發。

這(zhè)個類來(lái)源于EnvironmentError。有關異常實例屬性的更多信息,請(qǐng)參閱上(shàng)面的讨論。

在版本2.6中更改:更改socket.error爲将其用(yòng)作(zuò)基類。

exception ImportError

當import語句未能(néng)找到(dào)模塊定義或from ... import未能(néng)找到(dào)要導入的名稱時(shí)引發。

exception IndexError

當序列下(xià)标超出範圍時(shí)引發。(切片索引被靜默截斷以落入允許的範圍;如果索引不是普通整數,TypeError則會(huì)引發。)

exception KeyError

在現(xiàn)有密鑰集中未找到(dào)映射(字典)鍵時(shí)引發。

exception KeyboardInterrupt

當用(yòng)戶點擊中斷鍵時(shí)(通常Control-C或Delete),引發。在執行期間,會(huì)定期檢查中斷。當内置函數input()或raw_input()等待輸入時(shí)鍵入中斷也(yě)會(huì)引發此異常。該異常繼承,以防BaseException意外(wài)捕獲代碼,Exception從(cóng)而阻止解釋器退出。

在版本2.5中更改:更改爲從(cóng)中繼承BaseException。

exception MemoryError

當一個操作(zuò)用(yòng)完内存時(shí)引發,但(dàn)情況仍然可能(néng)被救出(通過删除一些(xiē)對(duì)象)。關聯的值是一個字符串,指示什(shén)麽樣的(内部)操作(zuò)耗盡内存。請(qǐng)注意,由于底層内存管理(lǐ)架構(C的malloc()功能(néng)),解釋器可能(néng)無法總是從(cóng)這(zhè)種情況中恢複; 它仍然會(huì)引發一個異常,以便可以打印堆棧回溯,以防止失控程序的發生。

exception NameError

當沒有找到(dào)本地或全球名稱時(shí)引發。這(zhè)僅适用(yòng)于非限定名稱。關聯的值是包含無法找到(dào)的名稱的錯誤消息。

exception NotImplementedError

這(zhè)個異常來(lái)源于RuntimeError。在用(yòng)戶定義的基類中,抽象方法在它們需要派生類重寫方法時(shí)應引發此異常。

1.5.2版本的新功能(néng)。

exception OSError

這(zhè)個異常來(lái)源于EnvironmentError。當一個函數返回一個與系統相關的錯誤(不适用(yòng)于非法參數類型或其他(tā)偶然錯誤)時(shí)會(huì)引發它。該errno屬性是from的數字錯誤代碼errno,strerror屬性是相應的字符串,将由C函數打印perror()。請(qǐng)參閱模塊errno,其中包含由基礎操作(zuò)系統定義的錯誤代碼的名稱。

對(duì)于涉及文(wén)件系統路徑(例如chdir()或unlink())的異常,異常實例将包含第三個屬性filename,它是傳遞給函數的文(wén)件名。

1.5.2版本的新功能(néng)。

exception OverflowError

當算(suàn)術運算(suàn)的結果太大(dà)而無法表示時(shí)引發。對(duì)于長整數(這(zhè)會(huì)發生而MemoryError不是放(fàng)棄)和(hé)大(dà)多數使用(yòng)純整數的操作(zuò)(這(zhè)會(huì)返回一個長整數)不會(huì)發生。由于C中缺少浮點異常處理(lǐ)的标準化,大(dà)多數浮點操作(zuò)也(yě)不會(huì)被檢查。

exception ReferenceError

當weakref.proxy()函數創建的弱引用(yòng)代理(lǐ)被用(yòng)于訪問垃圾收集後指示對(duì)象的屬性時(shí),會(huì)引發此異常。有關弱引用(yòng)的更多信息,請(qǐng)參閱weakref模塊。

版本2.2中的新功能(néng):以前稱爲weakref.ReferenceError例外(wài)。

exception RuntimeError

當檢測到(dào)不屬于任何其他(tā)類别的錯誤時(shí)引發。關聯的值是一個字符串,指示出錯的地方。

exception StopIteration

通過叠代器的next()方法來(lái)提示沒有其他(tā)值。這(zhè)是源自(zì)Exception而不是StandardError,因爲這(zhè)不被認爲是在正常的應用(yòng)程序中的錯誤。

2.2版本中的新功能(néng)。

exception SyntaxError

解析器遇到(dào)語法錯誤時(shí)引發。這(zhè)可能(néng)發生在一個import聲明(míng),在exec聲明(míng)中,中内置函數的調用(yòng)eval()或input()讀取初始腳本或标準輸入(也(yě)交互),或當。

這(zhè)個類的實例有屬性filename,lineno,offset并且text爲的細節更容易獲得。str()的異常實例隻返回消息。

exception IndentationError

與不正确縮進相關的語法錯誤的基類。這(zhè)是一個子類SyntaxError。

exception TabError

當縮進含有不一緻的制表符和(hé)空(kōng)格時(shí)引發。這(zhè)是一個子類IndentationError。

exception SystemError

當翻譯發現(xiàn)内部錯誤時(shí)引發,但(dàn)情況看(kàn)起來(lái)并不嚴重,導緻它放(fàng)棄所有希望。關聯的值是一個字符串,表示出現(xiàn)了(le)什(shén)麽問題(以低(dī)級方式)。

您應該将此報(bào)告給您的Python解釋器的作(zuò)者或維護者。一定要報(bào)告Python解釋器的版本(sys.version它也(yě)會(huì)在交互式Python會(huì)話(huà)開(kāi)始時(shí)打印),确切的錯誤消息(異常的關聯值)以及觸發錯誤的程序源(如果可能(néng))。

exception SystemExit

這(zhè)個例外(wài)是由sys.exit()函數引發的。當它不被處理(lǐ)時(shí),Python解釋器退出; 沒有堆棧回溯被打印。如果關聯值是一個純整數,則它指定系統退出狀态(傳遞給C的exit()函數); 如果是None,退出狀态爲零; 如果它有其他(tā)類型(如字符串),則打印該對(duì)象的值并且退出狀态爲一。

實例具有code設置爲建議(yì)的退出狀态或錯誤消息的屬性(默認爲None)。此外(wài),此異常直接來(lái)自(zì)BaseException而不是StandardError,因爲它在技術上(shàng)不是一個錯誤。

調用(yòng)将sys.exit()被轉換爲異常,以便可以執行清理(lǐ)處理(lǐ)程序(finally語句子句try),以便調試程序可以執行腳本而不會(huì)失去控制權。os._exit()如果确實需要立即退出(例如,在調用(yòng)後的子進程中os.fork()),則可以使用(yòng)該函數。

唯一的例外(wài)來(lái)自(zì)繼承BaseException,而不是StandardError或Exception使得它不會(huì)意外(wài)地被映入代碼捕獲Exception。這(zhè)允許異常正确傳播并導緻解釋器退出。

在版本2.5中更改:更改爲從(cóng)中繼承BaseException。

exception TypeError

當操作(zuò)或功能(néng)應用(yòng)于不适當類型的對(duì)象時(shí)引發。關聯的值是一個字符串,提供有關類型不匹配的詳細信息。

exception UnboundLocalError

在函數或方法中引用(yòng)局部變量時(shí)引發,但(dàn)沒有值綁定到(dào)該變量。這(zhè)是一個子類NameError。

2.0版本中的新功能(néng)。

exception UnicodeError

當發生與Unicode相關的編碼或解碼錯誤時(shí)引發。它是一個子類ValueError。

UnicodeError具有描述編碼或解碼錯誤的屬性。例如,err.object[err.start:err.end]給出編解碼器失敗的特定無效輸入。

encoding

引發錯誤的編碼的名稱。

reason

描述特定編解碼器錯誤的字符串。

object

編解碼器試圖編碼或解碼的對(duì)象。

start

中的無效數據的第一個索引object。

end

最後一個無效數據之後的索引object。

2.0版本中的新功能(néng)。

exception UnicodeEncodeError

在編碼期間發生與Unicode相關的錯誤時(shí)引發。它是一個子類UnicodeError。

2.3版本的新功能(néng)。

exception UnicodeDecodeError

在解碼期間發生與Unicode相關的錯誤時(shí)引發。它是一個子類UnicodeError。

2.3版本的新功能(néng)。

exception UnicodeTranslateError

在翻譯過程中發生與Unicode相關的錯誤時(shí)引發。它是一個子類UnicodeError。

2.3版本的新功能(néng)。

exception ValueError

當内建的操作(zuò)或函數接收到(dào)具有正确類型但(dàn)值不恰當的參數時(shí)引發,并且這(zhè)種情況不會(huì)被更精确的異常(例如,)所描述IndexError。

exception VMSError

隻在VMS上(shàng)可用(yòng)。當發生VMS特定錯誤時(shí)引發。

exception WindowsError

當發生特定于Windows的錯誤或錯誤編号與errno值不對(duì)應時(shí)引發。該winerror和(hé)strerror值是從(cóng)的返回值創建GetLastError()并FormatMessage()從(cóng)Windows平台的API函數。該errno值将該值映射winerror到(dào)相應的errno.h值。這(zhè)是一個子類OSError。

2.0版本中的新功能(néng)。

在版本2.5中更改:以前的版本将GetLastError()代碼放(fàng)入errno。

exception ZeroDivisionError

當分部或模運算(suàn)的第二個參數爲零時(shí)引發。關聯的值是一個指示操作(zuò)數和(hé)操作(zuò)類型的字符串。

以下(xià)例外(wài)用(yòng)作(zuò)警告類别; 請(qǐng)參閱warnings模塊了(le)解更多信息。

exception Warning

警告類别的基類。

exception UserWarning

用(yòng)戶代碼生成的警告的基類。

exception DeprecationWarning

有關不推薦使用(yòng)的功能(néng)的警告的基類。

exception PendingDeprecationWarning

基類,用(yòng)于警告将來(lái)不推薦使用(yòng)的功能(néng)。

exception SyntaxWarning

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

exception RuntimeWarning

用(yòng)于警告有關可疑運行時(shí)行爲的基類。

exception FutureWarning

基類用(yòng)于警告将來(lái)将在語義上(shàng)改變的構造。

exception ImportWarning

基類,用(yòng)于警告模塊導入中可能(néng)出現(xiàn)的錯誤。

2.5版本中的新功能(néng)。

exception UnicodeWarning

與Unicode相關的警告的基類。

New in version 2.5.

網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發
下(xià)一篇:内置函數 | Built-in Functions
上(shàng)一篇:内置常量 | Built-in Constants