这是我参与更文挑战的第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总会被执行。可是,存在如下状况就须要注意: