python try except finally 语句,如果finally语句里面有return语句,结果会是怎样的?

运维 qmt 111℃

在 Python 中,当一个函数内部的 try 块中包含了带有 return 语句的 try-except-else 结构,并且还有 finally 块时,执行的顺序如下:

  1. 首先,代码会执行 try 块中的语句。
  2. 如果在 try 块中的语句执行期间没有发生任何异常,那么会继续执行 else 块中的语句。
  3. 如果在 try 块或 else 块中的语句中发生了异常,并且该异常与 except 块中捕获的异常类型匹配,那么会跳过 else 块,然后执行匹配的 except 块中的语句。
  4. 如果在 try 块或 else 块中的语句中发生了异常,但该异常与 except 块中捕获的异常类型不匹配,那么异常将会向上层调用栈传播,直到找到合适的异常处理程序为止。
  5. 无论是否发生异常,最后都会执行 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语句,结果会是怎样的?

喜欢 (0)