上下文管理器和 with 语句
Python 中 with 语句的上下文管理器(Context Manager)是如何工作的?请用类实现一个文件操作的上下文管理器。
回答
我还是少年
上下文管理器通过 __enter__ 和 __exit__ 方法实现资源自动管理。
class ManagedFile:
def __init__(self, filename, mode='r'):
self.filename = filename
self.mode = mode
def __enter__(self):
self.file = open(self.filename, self.mode)
return self.file # 绑定到 as 变量
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
# 返回 False 或不返回,异常继续传播
# 返回 True 则抑制异常
with open('file.txt') as f: 等价于上述过程。__exit__ 接收异常信息,返回 True 可抑制异常。