Setter 没有抛出错误
Setter not throwing errors
我有一个 Node
class,我想确保只接受其他 Node
对象作为它的子对象,但是 TypeError
永远不会在我的单元测试。我正在使用 python 3.
Class
class Node:
def __init__(self, data):
self._child = None
self._data = data
@property
def child(self):
return self._child
@child.setter
def child(self, child):
if not isinstance(child, Node):
raise TypeError(f"Children must be of type Node, not {type(child)}.")
self._child = child
@property
def data(self):
return self._data
@data.setter
def data(self, data):
self._data = data
测试
def test_node_child_error():
node = Node(1)
with pytest.raises(TypeError):
node.child = 2
单元测试 returns Failed: DID NOT RAISE <class 'TypeError'>
当我尝试将新值记录到 setter 内的终端时,它说 child
是 <class 'NoneType'>
,但当我之后记录它时,该值会根据 Node
对象本身发生变化。
我一直在尝试使用 PyCharm 调试器来仔细查看,但不幸的是,我在另一个文件中使用了与调试器中使用的 class 相同的 class 名称所以它不再起作用了。
我发现了这个问题,但希望得到一些解释 why/how 这解决了它。显然,问题出在每次调用 setter 时都会获得 None
类型,因此我将 setter 编辑为如下内容。
@child.setter
def child(self, child):
if not isinstance(child, Node) and child is not None:
raise TypeError(f"Children must be of type Node, not {type(child)}.")
self._child = child
这不仅修复了我的测试用例,而且现在当我尝试故意抛出错误时,我得到正确的错误消息 TypeError: Children must be of type Node, not <class 'int'>.
而不是 TypeError: Children must be of type Node, not <class 'None'>.
。
我有一个 Node
class,我想确保只接受其他 Node
对象作为它的子对象,但是 TypeError
永远不会在我的单元测试。我正在使用 python 3.
Class
class Node:
def __init__(self, data):
self._child = None
self._data = data
@property
def child(self):
return self._child
@child.setter
def child(self, child):
if not isinstance(child, Node):
raise TypeError(f"Children must be of type Node, not {type(child)}.")
self._child = child
@property
def data(self):
return self._data
@data.setter
def data(self, data):
self._data = data
测试
def test_node_child_error():
node = Node(1)
with pytest.raises(TypeError):
node.child = 2
单元测试 returns Failed: DID NOT RAISE <class 'TypeError'>
当我尝试将新值记录到 setter 内的终端时,它说 child
是 <class 'NoneType'>
,但当我之后记录它时,该值会根据 Node
对象本身发生变化。
我一直在尝试使用 PyCharm 调试器来仔细查看,但不幸的是,我在另一个文件中使用了与调试器中使用的 class 相同的 class 名称所以它不再起作用了。
我发现了这个问题,但希望得到一些解释 why/how 这解决了它。显然,问题出在每次调用 setter 时都会获得 None
类型,因此我将 setter 编辑为如下内容。
@child.setter
def child(self, child):
if not isinstance(child, Node) and child is not None:
raise TypeError(f"Children must be of type Node, not {type(child)}.")
self._child = child
这不仅修复了我的测试用例,而且现在当我尝试故意抛出错误时,我得到正确的错误消息 TypeError: Children must be of type Node, not <class 'int'>.
而不是 TypeError: Children must be of type Node, not <class 'None'>.
。