【发布时间】:2014-09-01 09:44:46
【问题描述】:
我正在处理的一个项目中有多个上下文管理器。它即将发货,我遇到了一些我开始恐慌的事情。
我的印象是您不应该重新引发作为参数传递给上下文管理器类的 __exit__ 方法的异常。但是,我正在执行一些测试,似乎上下文管理器正在抑制其中抛出的异常。当我将 __exit__ 方法更改为如下所示时:
def __exit__(self, type_, value, trace):
if trace is not None:
print('ERROR IN TRACEBACK: ' + str(value))
# PYTHON 2.7 RAISE SYNTAX:
raise type_, value, trace
错误似乎正确传递。
我的问题是:如果 type_、value 和 trace 不是 None,在 __exit__ 方法中处理异常的正确方法是什么?提出(重新提出?)这样的异常是不是很糟糕? 这是我应该做的吗?
我遇到的错误可能是由其他原因引起的。通常我会彻底测试这一切,但目前我的时间似乎非常有限。我希望有人能解释这个函数的正确实现和
最终: 我可以安全地将 raise type_, value, trace 留在我的上下文管理器 __exit__ 方法中吗?
【问题讨论】:
标签: python exception-handling contextmanager