在 Python 中,当一个函数内部的 try
块中包含了带有 return
语句的 try-except-else
结构,并且还有 finally
块时,执行的顺序如下:
- 首先,代码会执行
try
块中的语句。 - 如果在
try
块中的语句执行期间没有发生任何异常,那么会继续执行else
块中的语句。 - 如果在
try
块或else
块中的语句中发生了异常,并且该异常与except
块中捕获的异常类型匹配,那么会跳过else
块,然后执行匹配的except
块中的语句。 - 如果在
try
块或else
块中的语句中发生了异常,但该异常与except
块中捕获的异常类型不匹配,那么异常将会向上层调用栈传播,直到找到合适的异常处理程序为止。 - 无论是否发生异常,最后都会执行
finally
块中的语句。finally
块中的代码总是会被执行,即使在try
块、else
块或except
块中遇到了return
语句。
以下是一个示例,展示了带有 try-except-else-finally
结构中的代码执行顺序:
如果在finally里面也有return语句,结果会是怎样的?
def my_function():
try:
print("执行 try 块")
return 1
except:
print("执行 except 块")
else:
print("执行 else 块")
return 2
finally:
print("执行 finally 块")
return 3
result = my_function()
print("函数返回值:", result)
执行结果:
执行 try 块
执行 finally 块
函数返回值: 3
本来程序执行到try语句里面,因为遇到return语句,所以不会调到else。
然后执行return 1;
可是,因为有个finally语句,执行这个return 1 之后,又执行了finally里面的return 3,所以my_function 返回的真正的值为 3.
转载请注明:QMT|Ptrade量化交易 » python try except finally 语句,如果finally语句里面有return语句,结果会是怎样的?