MST

星途 面试题库

面试题:Python上下文管理器的原理及自定义实现

解释Python上下文管理器的工作原理。请自定义一个上下文管理器类,用于文件操作,在进入上下文时打印'文件打开',退出上下文时打印'文件关闭',并处理可能的异常。
20.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

Python上下文管理器工作原理

上下文管理器通过 __enter____exit__ 这两个特殊方法来实现其功能。当使用 with 语句进入上下文时,会调用上下文管理器对象的 __enter__ 方法,该方法返回的值会绑定到 with 语句中的目标变量(如果有)。当离开 with 代码块时,无论是否发生异常,都会调用上下文管理器对象的 __exit__ 方法。如果发生异常,__exit__ 方法的参数会包含异常类型、异常值和追溯信息,通过适当处理这些参数,可以决定是否抑制异常。

自定义文件操作上下文管理器类

class FileContextManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
        self.file = None

    def __enter__(self):
        try:
            self.file = open(self.filename, self.mode)
            print('文件打开')
            return self.file
        except Exception as e:
            print(f'打开文件时发生错误: {e}')
            return None

    def __exit__(self, exc_type, exc_value, traceback):
        if self.file:
            self.file.close()
            print('文件关闭')
        if exc_type:
            print(f'发生异常: {exc_type}, {exc_value}, {traceback}')
            # 如果希望抑制异常,返回True
            # return True

使用示例:

with FileContextManager('test.txt', 'w') as f:
    if f:
        f.write('Hello, World!')