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