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.

Envoltorio __str__ en la excepción personalizada.

¿Por qué el siguiente código imprime mensaje de error en lugar de ABC \n mensaje de error?

class CustomException(Exception):
    """ABC"""
    def __init__(self, *args):
        super().__init__(*args)
        self.__str__ = self._wrapper(self.__str__)
    def _wrapper(self, f):
        def _inner(*args, **kwargs):
            return self.__doc__ + '\n' + f(*args, **kwargs)
        return _inner

print(CustomException('mensaje de error'))
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El código imprime solamente “error msg” en lugar de “ABC\nerror msg” porque el atributo __doc__ contiene el docstring de la clase, que es “ABC”. Sin embargo, el método __str__ ha sido reemplazado por la función _wrapper, que agrega el docstring al mensaje devuelto por __str__. En este caso, como args está vacío, solamente el mensaje de error es devuelto por __str__, y por lo tanto solamente se imprime “error msg”. Si se pasara un argumento al crear el objeto CustomException (por ejemplo, CustomException('error msg', 1)), entonces tanto el mensaje de error como el docstring serían impresos.

Comments are closed.