Python中当finally遇上continue时会发生什么?

avatar

图床有点慢

你们猜这三个函数执行结果是什么?


Python中当finally遇上continue时会发生什么?
6 回复
  1. 返回 1
    2. print(0) -> print(1)
    3. 语法错误

def test_finally_continue():
    for i in range(3):
        try:
            if i == 1:
                print(f"i={i}: 执行continue前")
                continue  # 这里会直接跳转到finally块
            print(f"i={i}: try块正常执行")
        finally:
            print(f"i={i}: finally块始终执行")
        print(f"i={i}: 循环体后续代码")  # 当i=1时这行不会执行

test_finally_continue()

输出:

i=0: try块正常执行
i=0: finally块始终执行
i=0: 循环体后续代码
i=1: 执行continue前
i=1: finally块始终执行
i=2: try块正常执行
i=2: finally块始终执行
i=2: 循环体后续代码

关键点:

  1. finally会在continue前执行:当try块中遇到continue时,会先执行finally块,然后才实际执行continue操作
  2. continue后的代码不执行:finally执行完后,直接跳到下一轮循环,不会执行循环体中continue之后的代码
  3. finally必定执行:无论try块中发生什么(continue/break/return/异常),finally块都会执行

简单说就是:continue跳转前会先“路过”finally。

总结:finally的优先级高于continue。

《流畅的 Python 》你值得拥有

我记得 c()这种写法,专门有一个 pep 规范定义了是非法的语法

return 就直接返回了,为什么还要 continue 和 break 呢?为什么凑 try …… finally 的工整吗

回到顶部