我正在写一个上下文管理器,允许捕获某种类型的异常。
class MyTypeError(TypeError):
pass
try:
with AssertRaises(TypeError):
raise MyTypeError()
except Exception as e:
print(type(e).__name__)
当内置异常引发时,这个管理器工作正常,但是失败了:
__exit__(...)
在此示例中,用户定义的excepton引发,但此异常等同于TypeError,我希望它由上下文管理器作为TypeError处理。 我检查了`isinstance(MyTypeError(),TypeError)== True'并希望
USING OpenEdge.Net.HTTP.*.
USING OpenEdge.Net.URI.
USING Progress.Json.ObjectModel.JsonObject.
DEFINE VARIABLE oClient AS IHTTPClient NO-UNDO.
以相同的方式工作(考虑继承)。有没有解决方案?
答案 0 :(得分:0)
检查异常本身(exc_val
),就像使用isinstance()
一样,或使用issubclass()
:
def __exit__(self, exc_type, exc_val, exc_tb):
if issubclass(exc_type, self.exc_type):
raise AssertionError
return True