Python 中的 with 语句与 try 语句:资源管理对比
1. 引言:为什么需要资源管理?
在编程世界中,资源管理是一个永恒的话题。无论是文件操作、数据库连接、网络套接字还是锁机制,都需要我们小心翼翼地处理——打开后必须关闭,获取后必须释放。Python 为我们提供了两种主要的资源管理策略:try 语句和 with 语句。
# 资源管理的经典问题:忘记关闭文件
file = open("data.txt", "r")
content = file.read()
# 如果这里发生异常,文件可能永远不会被关闭!
# file.close() # 容易被忘记
2. with 语句:优雅的上下文管理器
2.1 基本语法与工作原理
with 语句是 Python 的上下文管理器协议实现,它确保资源在使用后被正确清理:
# 使用 with 语句自动管理文件资源
with open("data.txt", "r") as file:
content = file.read()
# 文件会自动关闭,即使在读取过程中发生异常
魔法背后的原理: 进入 with 块后调用 enter 方法获取资源并执行代码块。若发生异常,调用 exit 处理异常并决定是否传播;若无异常,正常退出并调用 exit 清理资源。
2.2 自定义上下文管理器
任何实现了 enter 和 exit 方法的对象都可以作为上下文管理器:
class TimerContext:
"""计时器上下文管理器"""
def __enter__(self):
import time
self.start_time = time.time()
print("计时开始...")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
import time
elapsed = time.time() - self.start_time
()
TimerContext():
time
time.sleep()


