這是我參與更文挑戰的第14天,活動詳情查看: 更文挑戰python
整理異常處理中finally的兩個容易犯的錯誤。markdown
若是try異常處理中存在finally,finally中的代碼總會獲得執行函數
下面例子只是做爲演示,不用去糾結業務邏輯oop
看下面的代碼,寫出輸出結果post
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()
複製代碼
原覺得會輸出的結果:ui
I'm in while loop
I'm in try
I'm in finally
EOFError
Process finished with exit code 1
複製代碼
運行結果spa
I'm in while loop
I'm in try
I'm in finally
Process finished with exit code 0
複製代碼
看下面的代碼,寫出輸出結果code
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))
複製代碼
原覺得會輸出的結果:orm
I'm in try
12
複製代碼
運行結果get
I'm in try
I'm in finally
finally
Process finished with exit code 0
複製代碼
若是異常處理中存在finally, finally總會被執行。
若是在try塊語句中存在return的同時又存在finally塊語句,那麼將會在執行try塊語句中return語句以前去執行finally語句塊,而後再回來執行try塊語句中return語句。
可是例子中在finally塊語句中存在return語句,整個函數已結束,因此try塊語句中return語句將永遠得不到執行。
通常狀況下,若是異常處理中存在finally, finally總會被執行。可是,存在如下狀況就須要注意: