**執行可能會意外各種錯誤
程式的邏輯錯誤、使用者輸入不合法等都會引發異常,但它們不會導致程式崩潰
可以利用python提供的異常處理機制,在異常出現時及時捕獲並從內部消化掉
類名描述
assertionerror
當assert語句失敗時引發該異常
attributeerror
物件不存在此屬性
baseexception
所有異常的基類
exception
常規異常的基類
importerror
當匯入乙個模組失敗時引發該異常
indexerror
序列中無此索引/下標越界
ioerror
輸入/輸出操作失敗
keyboardinterrupt
使用者中斷執行(通常輸入ctr-c)
keyerror
對映中不存在此鍵
memoryerror
記憶體耗盡
nameerror
找不到名字(變數)
overflowerror
當算術運算結果超出表示範圍時引發該異常
recursionerror
當超過最大遞迴深度時引發該異常
runtimeerror
當產生其他所有類別以外的錯誤時引發該異常
stopiteration
當迭代器中沒有下乙個可獲取的元素時引發該異常
syntaxerror
python語法錯誤
taberror
當使用不一致的縮排方式時引發該異常
typeerror
對型別無效的操作
unboundlocalerror
引用未賦值的區域性變數時引發該異常
valueerror
傳入無效的引數
zerodivisionerror
除(或取模)運算的第二個引數為0
fileexistserror
當要建立的檔案或目錄已存在時引發該異常
filenotfounderror
當要訪問的檔案或目錄不存在時引發該異常
語法錯誤:syntaxerror
『>>>print 『bee』除以0錯誤:zerodivisionerrorsyntaxerror: missing parentheses in call to 『print』. did you mean print(『bee』)?
'>>> a=0;5/a下標越界:indexerror最為常見traceback (most recent call last):
zerodivisionerror: division by zero
這種包括列表、元組和字串,普遍存在。
』>>> al=[1,2,3,4];al[4]型別錯誤:typeerrorindexerror: list index out of range
『>>> ls=[1,『2』];ls.sort()訪問變數不存在:nameerrortypeerror: 『<』 not supported between instances of 『str』 and 『int』
引用變數前並沒有賦值,包括函式、類等未定義都會引發nameerror錯誤
』>>> x+=1字典關鍵字不存在:keyerrornameerror: name 『x』 is not defined
上述提到了下標越界錯誤,對字典來說,存在類似錯誤如上。
引發的錯誤還會提示不存在的關鍵字是什麼。
『>>> d=;d[2]未知的變數屬性:attributeerrortraceback (most recent call last):
keyerror: 2
』>>> l=;l.sorted()以上這些錯誤會引起程式中止退出,如果希望掌控意外,就需要在可能出錯誤的地方設定陷阱捕捉錯誤attributeerror: 『list』 object has no attribute 『sorted』
——如上sorted是內建函式,列表類中不存在方法sorted
try-except-else-finally語句
try
:《檢測語句》
except
《錯誤型別》
[as e]
:《處理異常》
else
:《未發生錯誤而執行的**>
finally
:《無論是否發生錯誤都一定會執行的**>
針對不同異常可以設定多個except,乙個except多個異常項則以元組形式表示。
如果不標註錯誤型別,則捕捉所有的錯誤;如果標註錯誤型別,則僅捕捉該異常。
異常具有傳遞機制,如果呼叫函式中某處丟擲的異常沒有**捉處理的話就會一層層傳遞到上一級呼叫處,直到**捉,如果一直未**捉,程式就會因為異常結束。
給定乙個輸入input,如何控制使用者輸入的內容?
我們可以使用關鍵字raise產生異常,與while true和break組合使用來控制輸入的內容。
raise關鍵字是用來產生異常的,一般來說需要內建的異常型別,但是也可以自行建立異常型別。
while
true
:try
: a=
input()
ifnot a.isdigit():
raise valueerror
else
:break
except
:print
('請輸入純數字!'
)print
('hi!'
)
使用關鍵字assert可以判斷乙個條件是否成立,如果成立則繼續執行後面的語句;如果不成立則會引發assertionerror異常。
while
true
:try
: a=
input()
assert a.isdigit(
)break
except
:print
('請輸入純數字!'
)print
('hi!'
)
自定義異常,實際上就是以baseexception類作為父類建立乙個子類。
class
hanpierror
(baseexception)
:def
__init__
(self,a)
: self.yala=a
def__str__
(self)
:return self.yala
while
true
:try
: a=
input
('請輸入:')if
not a.isdigit():
raise hanpierror\
('輸入錯誤,輸入內容為%s,請輸入純數字!'
%a)else
:break
except hanpierror as e:
print
(e)print
('輸入正確!'
)
python異常處理 Python 異常處理
使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...
python異常舉例 Python異常處理
1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...
python異常處理
當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...