使用 Errno 在 Python 中打印异常类型

Printing Exception type in Python using Errno

我目前有格式的代码

try:
    ....
except(HTTPError, URLError, socket.error) as e:
    print "error({0}):{1}".format(e.errno, e.strerror)
continue

但是想知道这三个中哪个触发了异常。在 python 中有没有办法做到这一点?

def exception():
    try:
        //code that could raise a ValueError or TypeError
    except ValueError as e:
        print "ValueError"
    except TypeError as e:
        print "TypeError"

只需添加更多 except 块,每个块都有特定于给定异常的代码。

如果做出不同的反应对你来说很重要,那么你应该单独抓住它们:

try:
    do_something()
except HTTPError:
    handle_HTTPError()
except URLError:
    handle_URLError()
except socket.error:
    handle socketerror()

但是如果您只是想显示或记录错误类型及其参数,您应该使用错误的 repr 而不是尝试自己格式化。例如:

>>> try:
...     raise IOError(911, "Ouch!")
... except IOError as e:
...     print "error({0}):{1}".format(e.errno, e.strerror)
...     print repr(e)
...
error(911):Ouch!
IOError(911, 'Ouch!')

就显示的信息而言,您拼凑的打印字符串与仅使用 repr 之间的差异很小。如果你真的想要打印或记录 "pretty" 消息,你可以随意操作字符串,但是 type(e) 不会节省你任何精力,它不适用于 display/logging:

>>> type(e)
<type 'exceptions.IOError'>

尝试使用 e.__class__.__name__。它会 return 值,例如 "ValueError""TypeError"

您也可以只使用 e.__class__,它会为您提供类似 <type 'exceptions.TypeError'>

的值