我目前拥有格式
的代码try:
....
except(HTTPError, URLError, socket.error) as e:
print "error({0}):{1}".format(e.errno, e.strerror)
continue
但是想知道三者中哪一个引发了异常。有没有办法在python中执行此操作?
答案 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"
只需添加除块之外的更多块,每块都具有特定于给定异常的代码。