有些魔法会留下烂摊子。也许你打开了一个传送门,却忘了关上它。
即使施法失败(报错),我们也必须打扫战场。我们需要一种方法来说:“无论发生什么,都要执行这个。”
finally 咒语
finally 块创造了一个保证。它在 try 和 except 块之后执行,永远会执行。
try:
print("打开盒子...")
# 也许这里出错了
except:
print("出故障了!")
finally:
print("关闭盒子。") # 这行永远会执行
1
未关闭的传送门
传送门打开了,但如果 teleport_hoppy 崩溃了,它就会一直开着!这很危险。
2
添加清理工作
在函数内部添加一个 finally: 块。
3
关上它
在 finally 中,打印 "Closing portal..." 并设置 portal_status = "Closed"。观察它即使在报错后也依然运行!
finally 非常适合“善后工作”——比如保存文件、关闭连接或重置开关,即使你的核心代码炸了也没关系。
参考答案点击展开点击收起
点击展开点击收起
参考答案:
def teleport_hoppy():
global portal_status
try:
print("Opening portal...")
print(1 / 0) # 崩溃!
print("Teleporting...")
except:
print("Teleport failed!")
finally:
print("Closing portal...")
portal_status = "Closed"高级技巧想更进一步?点击展开点击收起
F. 无法阻挡的代码块
finally里的代码甚至会在你在try块里写了return之后依然执行!- 它是清理资源(如关闭文件或数据库连接)最可靠的地方。
Loading...
终端输出
Terminal
Ready to run...