在Python中获取异常值

358 投票
7 回答
444504 浏览
提问于 2025-04-16 07:47

如果我有这段代码:

try:
    some_method()
except Exception, e:

我该怎么获取这个异常的值(我指的是它的字符串表示)呢?

7 个回答

50

虽然我知道这个问题已经有点老了,但我想推荐使用traceback模块来处理异常的输出。

你可以用traceback.print_exc()来把当前的异常信息打印到标准错误输出,就像如果这个异常没有被处理一样会打印出来;或者用traceback.format_exc()来获取同样的异常信息,但以字符串的形式。如果你想限制输出内容,或者把打印的内容重定向到一个文件对象,也可以给这两个函数传递不同的参数。

293

使用 repr()str() 的区别

使用 repr

>>> try:
...     print(x)
... except Exception as e:
...     print(repr(e))
... 
NameError("name 'x' is not defined")

使用 str

>>> try:
...     print(x)
... except Exception as e:
...     print(str(e))
... 
name 'x' is not defined
496

使用 str 方法

try:
    some_method()
except Exception as e:
    s = str(e)

另外,大多数异常类都有一个 args 属性。通常情况下,args[0] 会是一个错误信息。

需要注意的是,如果没有错误信息,单纯使用 str 方法会返回一个空字符串,而使用 repr 方法(正如 pyfunc 推荐的那样)至少会显示出异常的类型。我的看法是,如果你是在打印这个信息,那是给最终用户看的,他们并不关心异常的类型,只想要一个错误信息。

这实际上取决于你处理的异常类型以及它是如何被创建的。你有没有特别想讨论的内容呢?

撰写回答