首页 > 解决方案 > 异常派生类的 __repr__ 效果不佳

问题描述

我尝试对__repr__从异常继承的对象使用方法。

但什么也没打印!

谁能帮忙解释一下为什么?

class MyException(Exception):
    def __repr__(self):
        return "MyException Object"


try:
    raise MyException()
except MyException as e:
    print(e)   # shows nothing!

标签: pythoninheritanceexceptionrepr

解决方案


因为MyExceptionis inheriting Exception.__str__,这是首先由print( 因为隐式调用是 to str(e),它只在内部回退到__repr__if__str__不存在。

奇怪的是,Exception.__str__返回一个空白字符串:

>>> str(Exception())
''

我想玩弄它,它返回Excpetion作为参数传递的任何内容

>>> str(Exception(1))
'1'
>>> str(Exception(None))
'None'
>>> str(Exception(None, True))
'(None, True)'

__str__所以改为覆盖。或者更好的是,除了:

class MyException(Exception):
    def __repr__(self):
        return "MyException Object"
    __str__ = __repr__

推荐阅读