python之異常處理

2021-10-06 04:47:36 字數 4644 閱讀 9796

程式在執行過程中可能會出現⼀些錯誤。比如: 使用了不存在的索引,兩個不同型別的資料相加…這些錯誤我們稱之為異常。

print

(a)# nameerror: name 'a' is not defined

異常處理:程式執行時出現異常,目的並不是讓我們的程式直接終止!python是希望在出現異常時,我們可以編寫**來對異常進行處理

當在函式**現異常時,如果在函式中對異常進行了處理,則異常不會在進進行傳播。如果函式中沒有對異常進行處理,則異常會繼續向函式呼叫傳播。

'''

異常的傳播

# 當在函式**現異常時,如果在函式中處理了異常。則異常不會在繼續傳播

# 如果在函式中沒有處理異常,則異常會繼續向函式呼叫出傳播

# 如果函式呼叫處處理了異常,則不在傳播。如果沒有處理則繼續向呼叫處傳播

# 直到傳遞到全域性作用域(主模組)如果依然沒有處理,則呈現終止,並顯示異常資訊

'''deffn(

):print

('hello fn'

)print(10

/0)# 存在異常

# 對異常不處理,呼叫會出錯

# fn() # zerodivisionerror: division by zero

# 對異常處理,呼叫不會出錯

try:

fn()# 函式呼叫處處理了異常,則不在傳播 結果為 hello fn

except

:pass

如果函式呼叫處處理了異常,則不再傳播異常,如果沒有處理則繼續向呼叫處傳播。直到傳遞到全域性作用域(主模組)如果依然沒有處理,則程式終止,並顯示異常資訊。

當程式執行過程**現異常以後,所有異常資訊會儲存到⼀個異常物件中。而異常傳播時,實際上就是異常物件拋給了呼叫處。

# 異常在函式的多個傳播

deffn()

:print

('hello fn'

)print(10

/0)def

fn2():

print

('hello fn2'

) fn(

)def

fn3():

print

('hello fn3'

) fn2(

)# fn3() # 結果為 hello fn2 hello fn2 hello fn3 然後報錯 zerodivisionerror: division by zero line 40 line 44 line 48 line 50

try:

fn3(

)# 結果為 hello fn2 hello fn2 hello fn3

except

:pass

異常物件

try:

print

('這是要測試的**'

)except

:print

('except後不跟任何內容,此時它會捕獲所有的異常)

except nameerror:

print

('except後加錯誤型別,代表只能識別這一類錯誤'

)except exception as e:

print

('exception是所有異常類父類 所有如果except後跟exception 它會捕獲到所有的異常'

)print

('e是儲存該類具體錯誤內容,type(e)儲存了錯誤的型別'

)else

:print

('這是沒有出錯執行的**'

)finally

:print

('這是無論是否出錯,都要執行的內容'

)

except後不跟任何內容,此時它會捕獲所有的異常

# print(a) # nameerror: name 'a' is not defined

try:

print

(a)except

:print

('except後不跟任何內容,此時它會捕獲所有的異常'

)

except後加錯誤型別,代表只能識別這一類錯誤,其他錯誤不能識別,出現其他錯誤會報錯

try

:print

(a)except nameerror:

print

('except後加錯誤型別,代表只能識別這一類錯誤,其他錯誤不能識別,出現其他錯誤會報錯'

)print

(nameerror,

type

(nameerror)

)# 結果

# except後加錯誤型別,代表只能識別這一類錯誤,其他錯誤不能識別,出現其他錯誤會報錯

# try

:print

(a)except zerodivisionerror:

# 0作為除數的異常

print

('except後加錯誤型別,代表只能識別這一類錯誤,其他錯誤不能識別,出現其他錯誤會報錯'

)print

(nameerror,

type

(nameerror)

)# 結果

# 報錯 nameerror: name 'a' is not defined

# 說明 except後加錯誤型別,代表只能識別這一類錯誤,其他錯誤不能識別,出現其他錯誤會報錯

exception是所有異常類父類 所有如果except後跟exception 它會捕獲到所有的異常。

e是儲存該類具體錯誤內容,type(e)儲存了錯誤的型別

try

:print

(a)except exception as e:

print

('exception是所有異常類父類 所有如果except後跟exception 它會捕獲到所有的異常'

)print

('e是儲存該類具體錯誤內容,type(e)儲存了錯誤的型別'

)print

('出現異常了'

, e,

type

(e))

# 結果

# exception是所有異常類父類 所有如果except後跟exception 它會捕獲到所有的異常

# e是儲存該類具體錯誤內容,type(e)儲存了錯誤的型別

# 出現異常了 name 'a' is not defined

try:

print(10

/0)except exception as e:

print

('exception是所有異常類父類 所有如果except後跟exception 它會捕獲到所有的異常'

)print

('e是儲存該類具體錯誤內容,type(e)儲存了錯誤的型別'

)print

('出現異常了'

, e,

type

(e))

# 結果

# exception是所有異常類父類 所有如果except後跟exception 它會捕獲到所有的異常

# e是儲存該類具體錯誤內容,type(e)儲存了錯誤的型別

# 出現異常了 division by zero

else是正確**後可以執行的

try

:print(1

)except

:print

('出錯了'

)else

:print

('這是正確**後可以執行的'

)# 結果 1 這是正確**後可以執行的

finally是是無論是否出錯,都要執行的內容

try

:print

('這是要測試的**'

)print

(a)# 異常

except exception as e:

print

('這是出錯要執行的內容'

)print

('出現異常了'

, e,

type

(e))

finally

:print

('這是無論是否出錯,都要執行的內容'

)# 結果

# 出現異常了 name 'a' is not defined

# 這是無論是否出錯,都要執行的內容

總結:try 是必須的、else 有沒有都可以、except 和 finally ⾄少有⼀個

try

:print

('這是要測試的**'

)print(2

)# 正常

except exception as e:

print

('這是出錯要執行的內容'

)print

('出現異常了'

, e,

type

(e))

else

:print

('這是正確**後可以執行的'

)finally

:print

('這是無論是否出錯,都要執行的內容'

)# 結果

# 這是要測試的**

# 2# 這是無論是否出錯,都要執行的內容

python之異常處理 Python之異常處理

異常物件 請大家執行如下 a 100 0 print a 就會發現直譯器顯示如下的錯誤提示 traceback most recent call last file x.py line 1,in a 100 0 zerodivisionerror division by zero 大家要學會看直譯器...

Python之異常處理

在程式執行過程中影響程式正常執行的內容,稱為異常 nameerror print a indexerror 索引錯誤 li 1,2,3,4 print li 8 keyerror d dict a 1,b 2 print d f zerodivisionerror 除0錯誤 print 10 2 2...

Python之異常處理

try ret int input num 正常執行的 print ret except valueerror 捕捉錯誤 print 請輸入數字 try ret int input num 正常執行的 print ret except valueerror 捕捉錯誤 print 請輸入數字 exce...