使用 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'>
的值
我目前有格式的代码
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'>