如果我有这个代码:

try:
    some_method()
except Exception, e:

我怎么能得到这个异常值(字符串 我是说代表)?


当前回答

检查错误信息并对其进行处理(使用Python 3)…

try:
    some_method()
except Exception as e:
    if {value} in e.args:
        {do something}

其他回答

使用repr()和使用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

使用str

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

而且,大多数异常类都有一个args属性。通常,args[0]将是一个错误消息。

值得注意的是,如果没有错误消息,仅使用str将返回一个空字符串,而按照pyfunc建议使用repr将至少显示异常的类。我的看法是,如果您要打印它,那么它是为终端用户准备的,他们并不关心类是什么,只是想要一个错误消息。

这实际上取决于您正在处理的异常类以及如何实例化它。你有什么特别的想法吗?

检查错误信息并对其进行处理(使用Python 3)…

try:
    some_method()
except Exception as e:
    if {value} in e.args:
        {do something}

下面的方法对我很有效:

import traceback

try:
    some_method()
except Exception as e:
   # Python 3.9 or older
   print("".join(traceback.format_exception_only(type(e), e)).strip())
   # Python 3.10+
   print("".join(traceback.format_exception_only(e)).strip())

如果some_method()引发异常ValueError("asdf"),将打印您在回溯中看到的内容——减去traceback: ValueError: asdf。

这里是关于这个的文档。

尽管我知道这是一个老问题,但我还是建议使用traceback模块来处理异常的输出。

使用traceback.print_exc()将当前异常输出到标准错误,就像它仍然未被捕获时一样,或者使用traceback.format_exc()获得与字符串相同的输出。如果希望限制输出,或者将打印重定向到类文件对象,可以将各种参数传递给这两个函数中的任何一个。