python 異常處理

2021-09-26 18:17:50 字數 4841 閱讀 5531

異常

廣義上的錯誤分為錯誤和異常

錯誤指的是可以人為避免

異常是指在語法邏輯正確的前提下,出現的問題

在python裡,異常是乙個類,可以處理和使用**

異常的分類

異常處理

不能保證程式永遠正確執行,但是,必須保證程式在最壞的情況下得到的問題被妥善處理

python的異常處理模組全部語法為:

try

: #嘗試實現某個操作,

#如果沒出現異常,任務就可以完成

#如果出現異常,將異常從當前**塊扔出去嘗試解決異常

except 異常型別1

: 解決方案1:用於嘗試在此處處理異常解決問題

except 異常型別2:

解決方案2:用於嘗試在此處處理異常解決問題

except (異常型別1

,異常型別2...

) 解決方案:針對多個異常使用相同的處理方式

excpet:

解決方案:所有異常的解決方案

else

: 如果沒有出現任何異常,將會執行此處**

finally

: 管你有沒有異常都要執行的**

流程

執行try下面的語句

案例1:簡單異常案例

try

: num =

int(

input

("請輸入number:"

))

result =

100/num;

print

("the result is:"

.format

(result)

)except syntaxerror:

print

("這是語法有錯誤!!!"

)except:

print

("我知道有錯誤,但是不用指出錯誤型別"

)exit()

finally

:print

("我 fo 了"

)

輸出:

請輸入number:0

我知道有錯誤,但是不用指出錯誤型別

我 fo 了

案例2:簡單異常案例

給出異常資訊

try

: num =

int(

input

("請輸入number:"))

rst =

100/num

print

("計算結果是: "

.format

(rst)

) # 捕獲異常後,把異常例項化,出息資訊會在例項裡

# 注意以下寫法

# 以下語句是捕獲zerodivisionerror異常並例項化例項e

except zerodivisionerror as e:

print

("我知道有錯誤,但是不用指出錯誤型別"

)print

(e)print

(type

(e))

exit()

finally

:print

("我 fo 了"

)

輸出:

請輸入number:0

我知道有錯誤,那我報個錯

division by zero

我 fo 了

案例3:多種異常案例

如果是多種error的情況

需要把越具體的錯誤,越往前放

在異常類繼承關係中,越是子類的異常,越要往前放,

越是父親類的異常,越要往後

在處理異常的時候,一旦攔截到某乙個異常,則不在繼續往下檢視,直接進行下乙個**,即有finally則執行finally語句塊,否則就執行下乙個大的語句

try

: num =

int(

input

("請輸入number:"

))

rst =

100/ num

pint

("計算結果是: "

.format

(rst)

)except zerodivisionerror as e:

print

("輸入出現錯誤"

)print

(e) # exit是退出程式的意思

exit()

except nameerror as e:

print

("名字起錯了"

)print

(e)except attributeerror as e:

print

("好像屬性有問題"

)print

(e)exit()

# 所有異常都是繼承自exception

# 如果寫上下面這句話,任何異常都會攔截住

# 而且,下面這句話一定是最後乙個exception

except exception as e:

print

("我也不知道就出錯了"

)print

(e)except valueerror as e:

print

("no>>>>>>>>>>>>>>>>>>"

)print

("無論怎樣我都會執行"

)

輸出0:

請輸入number:0

輸入出現錯誤

division by zero

輸出1:

請輸入number:1

名字起錯了

name 'pint' is not defined

無論怎樣我都會執行

使用者手動引發異常

當某些情況,使用者希望自己引發乙個異常的時候,可以使用 raise 關鍵字來引發異常

案例4:raise異常案例

try

:print

("測試輸出"

)print

(3.1415926

) # 手動引發乙個異常

# 注意語法: raise errorclassname

raise valueerror

print

("程式沒有完結"

)except nameerror as e:

print

("nameerror"

)except valueerror as e:

print

("valueerror"

)except exception as e:

print

("有異常"

)finally

:print

("我肯定會被執行的"

)

輸出:

測試輸出   

3.1415926

valueerror

我肯定會被執行的

案例5:raise異常案例2-自定義異常

# 需要注意: 自定義異常必須是系統異常的子類

class

anqiaovalueerror

(valueerror)

: pass

try:

print

("測試輸出"

)print

(3.1415926

) # 手動引發乙個異常

# 注意語法: raise errorclassname

raise anqiaovalueerror

print

("程式沒有完結"

)except nameerror as e:

print

("nameerror"

)except valueerror as e:

print

("valueerror"

)except exception as e:

print

("有異常"

)finally

:print

("我肯定會被執行的"

)

輸出:

測試輸出

3.1415926

valueerror

我肯定會被執行的

案例6:else異常案例

# else語句案例

try:

num =

int(

input

("請輸入 number:"))

rst =

100/ num

print

("計算結果是: "

.format

(rst)

)except exception as e:

print

("exception"

)else

:print

("no exception"

)finally

:print

("反正我會被執行"

)

輸出0:

請輸入 number:0

exception

反正我會被執行

輸出1:

請輸入 number:1

計算結果是: 100.0

no exception

反正我會被執行

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...