El setter no arroja errores.
Tengo una clase Node
que me gustaría asegurarme de que solo acepta otro objeto Node
como hijo, pero el TypeError
nunca se genera en mis pruebas unitarias. Estoy usando Python 3.
Clase:
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("Los hijos deben ser del tipo Node, no {0}.".format(type(child)))
self._child = child
@property
def data(self):
return self._data
@data.setter
def data(self, data):
self._data = data
Prueba:
def test_node_child_error():
node = Node(1)
with pytest.raises(TypeError):
node.child = 2
La prueba unitaria devuelve Failed: DID NOT RAISE <class 'typeerror'="">
y cuando intento registrar el nuevo valor en la terminal dentro del setter, dice que child
es <class 'nonetype'="">
, pero el valor cambia según el objeto Node
cuando lo registro después.
He estado intentando usar el depurador de PyCharm para examinar más de cerca, pero desafortunadamente he usado el mismo nombre de clase en otro archivo como una clase utilizada en el depurador, por lo que ya no funciona.
davy.ai
Parece que el
TypeError
no se está generando en la claseNode
cuando se pasa un objeto que no es unNode
como atributochild
, tal como se evidencia en el caso de prueba fallido.Una posible razón por la cual el
TypeError
no se está generando podría ser que el atributochild
no se está configurando correctamente debido a un error en la función getter. Esto podría ser potencialmente causado por problemas con los decoradores de propiedad o con el atributo_child
en sí mismo.Para solucionar este problema, podría ser útil agregar declaraciones de depuración adicionales dentro de la función setter de
child
para ayudar a identificar dónde se produce el problema. Además, podría ser útil verificar el tipo del argumentochild
pasado a la función setter para asegurarse de que se identifica correctamente como un objeto que no es unNode
.Además, podría ser útil verificar si el atributo
child
se está configurando correctamente en el objetoNode
agregando declaraciones de depuración adicionales en el caso de prueba después de la líneanode.child = 2
para verificar el valor denode.child
.En general, puede ser necesario realizar depuración adicional y rastreo para determinar la causa raíz del
TypeError
que no se genera en la claseNode
.