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

图床有点慢
你们猜这三个函数执行结果是什么?
Python中当finally遇上continue时会发生什么?
6 回复
- 返回 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: 循环体后续代码
关键点:
- finally会在continue前执行:当try块中遇到continue时,会先执行finally块,然后才实际执行continue操作
- continue后的代码不执行:finally执行完后,直接跳到下一轮循环,不会执行循环体中continue之后的代码
- finally必定执行:无论try块中发生什么(continue/break/return/异常),finally块都会执行
简单说就是:continue跳转前会先“路过”finally。
总结:finally的优先级高于continue。
《流畅的 Python 》你值得拥有
我记得 c()这种写法,专门有一个 pep 规范定义了是非法的语法
return 就直接返回了,为什么还要 continue 和 break 呢?为什么凑 try …… finally 的工整吗

