在Java中,获取异常消息就像调用某个方法一样简单。 但在Python中,它似乎是不可能的。有时它可以通过这样做:
try:
# Code
pass
except Exception as e:
print(e.message)
但有时捕获这样的异常最终会引发另一个异常,因为message属性不存在。讽刺的是伤心。试图控制错误会产生另一个......
有时它可以这样做:
print(e.msg)
但有时它也会引发遗漏属性异常。
有时这也有效:
print(str(e))
但有时会打印一个空字符串,因此根本没用。
我甚至听说它取决于你正在使用的库,具体的Exception实现。这对我来说真的很愚蠢。如果我从来不知道它有哪些属性来检索错误消息,我如何处理打印已发生的错误?
答案 0 :(得分:2)
但有时会打印一个空字符串,因此根本没用。
是的,当有人在没有消息的情况下引发异常时会发生这种情况。责备作者(你正在使用的lib)。
通常你可以使用repr
,它应该是明确的,如果没有覆盖,至少包含有关异常类型的信息:
try:
0/0
except Exception as exc:
print(repr(exc))
raise
如果您需要完整的追溯,可以使用
import traceback
try:
0/0
except Exception:
print(traceback.format_exc())
raise