目錄
- Python異常處理機制
- 容易犯的錯誤1
- 容易犯的錯誤2
- 總結(jié)
Python異常處理機制
如果try異常處理中存在finally,finally中的代碼總會得到執(zhí)行
下面例子只是作為演示,不用去糾結(jié)業(yè)務邏輯
容易犯的錯誤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é)果:
運行結(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)文章!
您可能感興趣的文章:- 淺談python中的錯誤與異常
- Python基礎(chǔ)之語法錯誤和異常詳解
- Python運行錯誤異常代碼含義對照表
- 新手常見Python錯誤及異常解決處理方案
- 使用Python將Exception異常錯誤堆棧信息寫入日志文件
- Python學習筆記之錯誤和異常及訪問錯誤消息詳解
- Python 錯誤和異常小結(jié)
- Python錯誤和異??偨Y(jié)詳細