CodeWalk

上下文管理器和 with 语句

作者:我还是少年 · 2026-05-30 12:55

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 可抑制异常。