Python的異常處理

2022-08-22 03:15:15 字數 2610 閱讀 6253

異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下

在python中不同的異常可以用不同的型別(python中統一了類與型別,型別即類)去標識,不同的類物件標識不同的異常,乙個異常標識一種錯誤

常見異常:

attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

ioerror 輸入/輸出異常;基本上是無法開啟檔案

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,跟**邏輯並無關係,顯得可讀性極差,如果類似的邏輯多,那麼每一次都需要判斷這些內容,就會倒置我們的**特別冗長。

try

:

#可能發生異常的**

except

異常型別1 as 變數名:

print(變數名) #

變數名儲存的是具體的錯誤資訊

except

異常型別2 as 變數名:

print(變數名) #

變數名儲存的是具體的錯誤資訊

except

exception as 變數名:

print(變數名) #

變數名儲存的是具體的錯誤資訊

else

:

print('

如果以上**沒有發生異常以及異常處理工作就執行這裡的**')

print('

一般情況下else中的**用來下結論')

#logging模組

finally

:

print('

不管**是否有異常都會執行,且在函式中遇到return仍然會執行')

print('

一般情況下用於這個函式中資源的**

')

try..except這種異常處理機制就是取代if那種方式,讓你的程式在不犧牲可讀性的前提下增強健壯性和容錯性

異常處理中為每乙個異常定製了異常型別(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...