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'))
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, comoargs
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 objetoCustomException
(por ejemplo,CustomException('error msg', 1)
), entonces tanto el mensaje de error como el docstring serían impresos.