異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下
在python中不同的異常可以用不同的型別(python中統一了類與型別,型別即類)去標識,不同的類物件標識不同的異常,乙個異常標識一種錯誤
常見異常:
attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性xioerror 輸入/輸出異常;基本上是無法開啟檔案
importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤
indentationerror 語法錯誤(的子類) ;**沒有正確對齊
indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
keyerror 試圖訪問字典裡不存在的鍵
keyboardinterrupt ctrl+c被按下
nameerror 使用乙個還未被賦予物件的變數
syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)
typeerror 傳入物件型別與要求的不符合
unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,
導致你以為正在訪問它
valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的
#我們平時用if做的一些簡單的異常處理num1=input('>>: ') #輸入乙個字串試試
ifnum1.isdigit():
int(num1)
#我們的正統程式放到了這裡,其餘的都屬於異常處理範疇
elif
num1.isspace():
print('
輸入的是空格,就執行我這裡的邏輯')
elif len(num1) ==0:
print('
輸入的是空,就執行我這裡的邏輯')
else
:
print('
其他情情況,執行我這裡的邏輯
')#這些if,跟**邏輯並無關係,顯得可讀性極差,如果類似的邏輯多,那麼每一次都需要判斷這些內容,就會倒置我們的**特別冗長。
trytry..except這種異常處理機制就是取代if那種方式,讓你的程式在不犧牲可讀性的前提下增強健壯性和容錯性:
#可能發生異常的**
except
異常型別1 as 變數名:
print(變數名) #
變數名儲存的是具體的錯誤資訊
except
異常型別2 as 變數名:
print(變數名) #
變數名儲存的是具體的錯誤資訊
except
exception as 變數名:
print(變數名) #
變數名儲存的是具體的錯誤資訊
else
:
print('
如果以上**沒有發生異常以及異常處理工作就執行這裡的**')
print('
一般情況下else中的**用來下結論')
#logging模組
finally
:
print('
不管**是否有異常都會執行,且在函式中遇到return仍然會執行')
print('
一般情況下用於這個函式中資源的**
')
異常處理中為每乙個異常定製了異常型別(python中統一了類與型別,型別即類),對於同一種異常,乙個except就可以捕捉到,可以同時處理多段**的異常(無需『寫多個if判斷式』)減少了**,增強了可讀性
如果你想要的效果是,無論出現什麼異常,我們統一丟棄,或者使用同一段**邏輯去處理他們,那麼只有乙個exception就足夠了。
如果你想要的效果是,對於不同的異常我們需要定製不同的處理邏輯,那就需要用到多分支了。我們可以使用多分支+萬能異常來處理異常。使用多分支優先處理一些能預料到的錯誤型別,一些預料不到的錯誤型別應該被最終的萬能異常捕獲。需要注意的是,萬能異常一定要放在最後,否則就沒有意義了。
assert斷言是宣告其布林值必須為真的判定,如果發生異常就說明表達示為假。可以理解assert斷言語句為raise-if-not,用來測試表示式,其返回值為假,就會觸發異常。
assert的異常引數,其實就是在斷言表示式後新增字串資訊,用來解釋斷言並更好的知道是**出了問題。格式如下:
assert expression [, arguments]
assert 表示式 [, 引數]
assert len(lists) >=5,'列表元素個數小於5'
assert 2==1,'2不等於1'備註:格式:assert 條件 , 條件為false時的錯誤資訊 結果為raise乙個assertionerror出來
#assert 條件
assert 1 == 1
assert 1 == 2
python異常處理 Python 異常處理
使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...
Python的異常處理
python中的異常型別分如下幾種 1 nameerror 嘗試訪問乙個未申明的變數 v nameerror name v is not defined 2 zerodivisionerror 除數為0 v 1 0 zerodivisionerror int division or modulo b...
Python的異常處理
1.raise語句 為了引發異常,可以使用乙個類或者例項呼叫raise語句。raise exceptiontraceback most recent call last file line 1,in exception raise exception hyperdive overload trace...