MST

星途 面试题库

面试题:Python数值运算中上下文管理器的异常处理与资源管理

在Python中,当使用上下文管理器进行数值运算时,如果在 `with` 块内发生了除零错误(`ZeroDivisionError`),如何确保相关资源(如打开的文件、数据库连接等)能够正确释放?请编写一段完整的代码示例,展示上下文管理器在处理这类异常时如何保证资源的合理管理。
26.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class ResourceManager:
    def __init__(self):
        # 模拟初始化资源,例如打开文件
        self.file = open('test.txt', 'w')

    def __enter__(self):
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        # 关闭文件,释放资源
        self.file.close()
        if exc_type == ZeroDivisionError:
            print(f"捕获到除零错误: {exc_value}")
            # 可以在这里进行额外的错误处理
            return True  # 返回True表示异常已处理,不再向上传播

with ResourceManager() as file:
    try:
        result = 1 / 0
        file.write(str(result))
    except ZeroDivisionError:
        pass


上述代码实现了一个简单的上下文管理器 ResourceManager,在 __exit__ 方法中关闭打开的文件,并处理 ZeroDivisionError 异常。如果发生除零错误,会打印错误信息并返回 True 以表明异常已处理。在 with 块内尝试进行除零运算,即使发生异常,文件也会被正确关闭。