如何确保我总是以安全的方式在Python中获得异常消息?

时间:2017-09-07 12:35:29

标签: python

在Java中,获取异常消息就像调用某个方法一样简单。 但在Python中,它似乎是不可能的。有时它可以通过这样做:

try:
    # Code
    pass
except Exception as e:
    print(e.message)

但有时捕获这样的异常最终会引发另一个异常,因为message属性不存在。讽刺的是伤心。试图控制错误会产生另一个......

有时它可以这样做:

print(e.msg)

但有时它也会引发遗漏属性异常。

有时这也有效:

print(str(e))

但有时会打印一个空字符串,因此根本没用。

我甚至听说它取决于你正在使用的库,具体的Exception实现。这对我来说真的很愚蠢。如果我从来不知道它有哪些属性来检索错误消息,我如何处理打印已发生的错误?

1 个答案:

答案 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