我有一个使用 Python 3.6+ 的子类,__set_name__
以确保拥有的类已经注释了携带子类的字段的类型。如果他们没有引发异常。
但是,任何引发的异常总是被 Python 捕获并被RuntimeError
引发。
例如:
class Child:
def __set_name__(self, owner, name):
raise Exception("OOPS!")
class Owner():
child = Child()
结果是:
Traceback (most recent call last):
File "<stdin>", line 3, in __set_name__
Exception: OOPS!
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: Error calling __set_name__ on 'Child' instance 'child' in 'Owner'
这很可能是预期的行为(找不到对__set_name__
异常的特定引用),但也可能表明期望__set_name__
永远不会遭受异常。
我看到的行为不是问题,因为在正确的条件下会发生异常。但是,由于我不能确定引发的异常是我的代码引发的异常,因此测试起来很棘手。
有没有更好的方法来引发一个适合测试的异常,或者确实有一种简单的方法来检查由 包裹的异常RuntimeError
确实是我的代码引发的异常?