【发布时间】:2016-11-17 06:50:26
【问题描述】:
# python 3.5
>>> class MyError(Exception):
... pass
...
>>> raise MyError('message')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyError: message
我希望仅打印 message 而不是 __main__.MyError: message 的异常。我尝试在MyError 本身及其元类中定义__str__ 和__repr__,但这些都没有效果。 python解释器从哪里得到__main__.MyError?
请注意,我可以轻松更改 MyError 实例的打印方式,以及 MyError 本身的打印方式,但对异常消息都没有任何影响:
class MyType(type):
def __str__(self):
return '***'
class MyError(Exception, metaclass=MyType):
def __str__(self):
return 'xxx'
print(MyError) # ***
print(MyError()) # xxx
raise MyError() # still the same
【问题讨论】:
-
您不想捕获并打印消息?
-
__main__.MyError是您提出的异常对象。 -
@AChampion 当然可以,但我通常可以自定义对象的字符串表示。在这种情况下并非如此。
-
@yBot 当然可以,但我正在尝试了解异常报告的工作原理。
-
您可以自定义
__str__()和__repr__(),但如果您想自定义解释器如何打印未处理的异常,则需要重新定义sys.excepthook()。你当然可以处理它。
标签: python python-3.x