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

时间:2015-02-07 00:01:17

标签: python errno try-except

我目前拥有格式

的代码
try:
    ....
except(HTTPError, URLError, socket.error) as e:
    print "error({0}):{1}".format(e.errno, e.strerror)
continue
但是想知道三者中哪一个引发了异常。有没有办法在python中执行此操作?

3 个答案:

答案 0 :(得分:1)

如果您对采取不同的反应非常重要,那么您应该单独捕捉它们:

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之间的差别很小。如果你真的想要一个漂亮的"要打印或记录的消息,您可以将字符串操作到您心中的内容,但type(e)不会为您节省任何费用,而不是用于显示/记录:

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

答案 1 :(得分:1)

尝试使用e.__class__.__name__。它会返回"ValueError""TypeError"等值。

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

等值

答案 2 :(得分:0)

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

只需添加除块之外的更多块,每块都具有特定于给定异常的代码。