es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el TypeError no se está generando en la clase Node cuando se pasa un objeto que no es un Node como atributo child, 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 atributo child 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 argumento child pasado a la función setter para asegurarse de que se identifica correctamente como un objeto que no es un Node.

    Además, podría ser útil verificar si el atributo child se está configurando correctamente en el objeto Node agregando declaraciones de depuración adicionales en el caso de prueba después de la línea node.child = 2 para verificar el valor de node.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 clase Node.

Comments are closed.