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

如果try異常處理中存在finally,finally中的代碼總會(huì)得到執(zhí)行
下面例子只是作為演示,不用去糾結(jié)業(yè)務(wù)邏輯
容易犯的錯(cuò)誤1看下面的代碼,寫出輸出結(jié)果
def dig_dig1(): while True:print('I’m in while loop')try: print('I’m in try') raise EOFErrorexcept IOError: print('IOEoor')finally: print('I’m in finally') breakdig_dig1()
原以為會(huì)輸出的結(jié)果:
I’m in while loopI’m in tryI’m in finallyEOFErrorProcess finished with exit code 1
運(yùn)行結(jié)果
I’m in while loopI’m in tryI’m in finallyProcess finished with exit code 0 如果異常處理中存在finally, finally總會(huì)被執(zhí)行; 那么在執(zhí)行finally之前,try中的產(chǎn)生的異常將會(huì)被臨時(shí)保存起來,當(dāng)finally的代碼執(zhí)行完成后,再拋出異常; 但當(dāng)finally中存在raise或return或break時(shí), try中的異常將會(huì)被拋棄。容易犯的錯(cuò)誤2
看下面的代碼,寫出輸出結(jié)果
def dig_dig2(index): try:print('I’m in try')if index < 0: raise IndexErrorelse: 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 try12
運(yùn)行結(jié)果
I’m in tryI’m in finallyfinallyProcess finished with exit code 0 如果異常處理中存在finally, finally總會(huì)被執(zhí)行。 如果在try塊語句中存在return的同時(shí)又存在finally塊語句,那么將會(huì)在執(zhí)行try塊語句中return語句之前去執(zhí)行finally語句塊,然后再回來執(zhí)行try塊語句中return語句。 但是例子中在finally塊語句中存在return語句,整個(gè)函數(shù)已結(jié)束,所以try塊語句中return語句將永遠(yuǎn)得不到執(zhí)行。總結(jié)
一般情況下,如果異常處理中存在finally, finally總會(huì)被執(zhí)行。但是,存在以下情況就需要注意:
在執(zhí)行finally之前,try中的產(chǎn)生的異常將會(huì)被臨時(shí)保存起來,當(dāng)finally的代碼執(zhí)行完成后,再拋出異常; 但當(dāng)finally中存在raise或return或break時(shí), try中的異常將會(huì)被拋棄。 如果在try塊語句中存在return的同時(shí)又存在finally塊語句,那么將會(huì)在執(zhí)行try塊語句中return語句之前去執(zhí)行finally語句塊,然后再回來執(zhí)行try塊語句中return語句。但是在finally塊語句中存在return語句,整個(gè)函數(shù)已結(jié)束,所以try塊語句中return語句將永遠(yuǎn)得不到執(zhí)行。以上就是Python異常處理中容易犯得錯(cuò)誤總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于python 異常處理的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 解決Android studio xml界面無法預(yù)覽問題2. 什么是python的自省3. Springboot Druid 自定義加密數(shù)據(jù)庫密碼的幾種方案4. Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁效果(實(shí)例代碼)5. 詳解Android studio 動(dòng)態(tài)fragment的用法6. Vuex localStorage的具體使用7. php模擬實(shí)現(xiàn)斗地主發(fā)牌8. IntelliJ IDEA安裝插件的方法步驟9. Vue封裝一個(gè)TodoList的案例與瀏覽器本地緩存的應(yīng)用實(shí)現(xiàn)10. 使用Android studio查看Kotlin的字節(jié)碼教程

網(wǎng)公網(wǎng)安備