異常處理語句

2022-07-09 23:15:09 字數 2631 閱讀 7445

在程式的編寫過程中會出現各種錯誤,語法錯誤在程式啟動時就會檢測出來,它是程式正常執行的前提條件。程式中還有一種錯誤發生在程式執行後,可能是由於邏輯問題,又或者是業務發生了改變,為了能讓使用者有更好的體驗,加強**的健壯性,我們需要對這些錯誤進行處理,也叫異常處理。

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

程式執行中的異常可以分為兩類:語法錯誤和邏輯錯誤。首先,我們必須知道,語法錯誤跟異常處理無關,所以我們在處理異常之前,必須避免語法上的錯誤。

在 python 中通過 try-except 語句進行異常處理。

try-except 語句的基本語法格式如下:

try:

《語句塊1>

except 《異常型別1>:

《語句塊2>

except 《異常型別2> :

《語句塊3>

else:

《語句塊4>

finally:

《語句塊5>

語句塊 1 中的**如果發生異常,且異常與型別與對應 excep 語句中的異常型別相同則會被其捕獲,從而執行對應的語句塊

沒有發生異常時,會執行 else 語句後的**塊,不管有沒有發生異常,finally 語句後的**塊一定會執行

常見異常型別

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

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

importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 語法錯誤(的子類) ;**沒有正確對齊

indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 試圖訪問字典裡不存在的鍵

keyboardinterrupt ctrl+c被按下

nameerror 使用乙個還未被賦予物件的變數

syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

typeerror 傳入物件型別與要求的不符合

unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,

導致你以為正在訪問它

valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的

在python的異常中,有乙個萬能異常:exception,他是所有異常的父類,可以捕獲任意異常。它是一把雙刃劍,有利有弊,我們要視情況使用

如果你想要的效果是,無論出現什麼異常,我們統一丟棄,或者使用同一段**邏輯去處理他們,那麼只有乙個exception就足夠了。

如果你想要的效果是,對於不同的異常我們需要定製不同的處理邏輯,那就需要用到多分支了。我們可以使用多分支+萬能異常來處理異常。使用多分支優先處理一些能預料到的錯誤型別,一些預料不到的錯誤型別應該被最終的萬能異常捕獲。需要注意的是,萬能異常一定要放在最後,否則就沒有意義了。

我們可以使用except與as+變數名 搭配使用,變數名儲存的是具體的錯誤資訊,列印變數名會直接輸出報錯資訊

def dealwith_file():

try:

f = open('file',encoding='utf-8')

for line in f:

int(line)

return true

except exception as e:

print(e)

return false

finally:

'''不管try語句中的**是否報錯,都會執行finally分支中的**'''

'''去完成一些連線操作的收尾工作'''

print('finally 被執行了')

f.close()

ret = dealwith_file()

print(ret)

主動觸發異常

try:

raise typeerror('型別錯誤')

except exception as e:

print(e)

先完成功能 在測試的時候 一邊修改** 一邊加上異常處理,只要加上異常處理,一定要寫日誌,不要在大段的**外直接套上異常處理。應該是在具體的邏輯上(具體的細節處的**段)加上細粒度異常處理。對於可以預料到的異常 一定要盡力的疏導 如果不能解決 必須要寫上提示以及引發錯誤的原因

assert斷言是宣告其布林值必須為真的判定,如果發生異常就說明表達示為假。可以理解assert斷言語句為raise-if-not,用來測試表示式,其返回值為假,就會觸發異常。

assert的異常引數,其實就是在斷言表示式後新增字串資訊,用來解釋斷言並更好的知道是**出了問題。格式如下:

assert expression [, arguments]

assert 表示式 [, 引數]

assert len(lists) >=5,'列表元素個數小於5'

assert 2==1,'2不等於1'

備註:格式:assert 條件 , 條件為false時的錯誤資訊 結果為raise乙個assertionerror出來

C 語句異常處理語句

1,try.catch.finally 不會找到邏輯錯誤,try裡面放檢測 catch 捕捉到的異常,怎樣處理finally不管有沒有異常都會執行 try catch finally 3種組合 2,finally 很頑強 return後仍然會執行 3,4,excption的用法 exception是...

python 異常處理語句

異常處理 2 try 3 try 4 num input 請輸入兩個數字以空格隔開!5 num num.split 6 print num 7 print sum num 8 except valueerror 9 print 程式執行 現了type的錯誤!10 else 11 print 如果沒報...

異常處理 try與except處理異常語句

def convert numbers s try return int s except valueerror return nonetry except介紹 與其他語言相同,在python中,try except語句主要是用於處理程式正常執行過程中出現的一些異常情況,如語法錯 python作為指...