我正在从事的一个项目有几个上下文管理器。它即将发货,我遇到了一些我开始恐慌的事情。
我的印象是您不应该重新引发作为参数传递给上下文管理器类的 __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__ 方法中吗?