Python異常處理中容易犯得錯誤總結(jié)
Python異常處理機制

如果try異常處理中存在finally,finally中的代碼總會得到執(zhí)行
下面例子只是作為演示,不用去糾結(jié)業(yè)務(wù)邏輯
容易犯的錯誤1
看下面的代碼,寫出輸出結(jié)果
def dig_dig1():
while True:
print("I'm in while loop")
try:
print("I'm in try")
raise EOFError
except IOError:
print("IOEoor")
finally:
print("I'm in finally")
break
dig_dig1()
原以為會輸出的結(jié)果:
I'm in while loop I'm in try I'm in finally EOFError Process finished with exit code 1
運行結(jié)果
I'm in while loop I'm in try I'm in finally Process finished with exit code 0
- 如果異常處理中存在finally, finally總會被執(zhí)行;
- 那么在執(zhí)行finally之前,try中的產(chǎn)生的異常將會被臨時保存起來,當finally的代碼執(zhí)行完成后,再拋出異常;
- 但當finally中存在raise或return或break時, try中的異常將會被拋棄。
容易犯的錯誤2
看下面的代碼,寫出輸出結(jié)果
def dig_dig2(index):
try:
print("I'm in try")
if index < 0:
raise IndexError
else:
return index
except IndexError:
print("I'm in except")
return "except"
finally:
print("I'm in finally")
return "finally"
print(dig_dig2(12))
原以為會輸出的結(jié)果:
I'm in try 12
運行結(jié)果
I'm in try I'm in finally finally Process finished with exit code 0
- 如果異常處理中存在finally, finally總會被執(zhí)行。
- 如果在try塊語句中存在return的同時又存在finally塊語句,那么將會在執(zhí)行try塊語句中return語句之前去執(zhí)行finally語句塊,然后再回來執(zhí)行try塊語句中return語句。
- 但是例子中在finally塊語句中存在return語句,整個函數(shù)已結(jié)束,所以try塊語句中return語句將永遠得不到執(zhí)行。
總結(jié)
一般情況下,如果異常處理中存在finally, finally總會被執(zhí)行。但是,存在以下情況就需要注意:
- 在執(zhí)行finally之前,try中的產(chǎn)生的異常將會被臨時保存起來,當finally的代碼執(zhí)行完成后,再拋出異常; 但當finally中存在raise或return或break時, try中的異常將會被拋棄。
- 如果在try塊語句中存在return的同時又存在finally塊語句,那么將會在執(zhí)行try塊語句中return語句之前去執(zhí)行finally語句塊,然后再回來執(zhí)行try塊語句中return語句。但是在finally塊語句中存在return語句,整個函數(shù)已結(jié)束,所以try塊語句中return語句將永遠得不到執(zhí)行。
以上就是Python異常處理中容易犯得錯誤總結(jié)的詳細內(nèi)容,更多關(guān)于python 異常處理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
tensorflow 環(huán)境變量設(shè)置方式
今天小編就為大家分享一篇tensorflow 環(huán)境變量設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python 讀取千萬級數(shù)據(jù)自動寫入 MySQL 數(shù)據(jù)庫
這篇文章主要介紹了Python 讀取千萬級數(shù)據(jù)自動寫入 MySQL 數(shù)據(jù)庫,本篇文章會給大家系統(tǒng)的分享千萬級數(shù)據(jù)如何寫入到 mysql,分為兩個場景,兩種方式2022-06-06
解決Tensorflow2.0 tf.keras.Model.load_weights() 報錯處理問題
這篇文章主要介紹了解決Tensorflow2.0 tf.keras.Model.load_weights() 報錯處理問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨想過來看看吧2020-06-06
Python中bytes字節(jié)串和string字符串之間的轉(zhuǎn)換方法
python中字節(jié)字符串不能格式化,獲取到的網(wǎng)頁有時候是字節(jié)字符串,需要轉(zhuǎn)化后再解析,下面這篇文章主要給大家介紹了關(guān)于Python中bytes字節(jié)串和string字符串之間的轉(zhuǎn)換方法,需要的朋友可以參考下2022-01-01
使用Python FastAPI構(gòu)建Web服務(wù)的實現(xiàn)
這篇文章主要介紹了使用Python FastAPI構(gòu)建Web服務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06
python?rpyc客戶端調(diào)用服務(wù)端方法的注意說明
這篇文章主要介紹了python?rpyc客戶端調(diào)用服務(wù)端方法的注意說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
python3實現(xiàn)語音轉(zhuǎn)文字(語音識別)和文字轉(zhuǎn)語音(語音合成)
這篇文章主要介紹了python3實現(xiàn)語音轉(zhuǎn)文字(語音識別)和文字轉(zhuǎn)語音(語音合成),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
window環(huán)境pip切換國內(nèi)源(pip安裝異常緩慢的問題)
這篇文章主要介紹了window環(huán)境pip切換國內(nèi)源(pip安裝異常緩慢的問題),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12
通過Python的filestools庫給圖片添加全圖水印的示例詳解
這篇文章主要介紹了通過Python的filestools庫給圖片添加全圖水印,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
淺談pandas中Dataframe的查詢方法([], loc, iloc, at, iat, ix)
下面小編就為大家分享一篇淺談pandas中Dataframe的查詢方法([], loc, iloc, at, iat, ix),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

