🐸

打扫战场

Python 基础python-architect-10-cleanup
奖励: 90 XP
|

有些魔法会留下烂摊子。也许你打开了一个传送门,却忘了关上它。

即使施法失败(报错),我们也必须打扫战场。我们需要一种方法来说:“无论发生什么,都要执行这个。”

finally 咒语

finally 块创造了一个保证。它在 tryexcept 块之后执行,永远会执行

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...