我想捕获一个 Python 异常并打印它而不是重新引发它。例如:
def f(x):
try:
return 1/x
except:
print <exception_that_was_raised>
这应该这样做:
>>> f(0)
'ZeroDivisionError'
无一例外被提出。
有没有办法做到这一点,除了在一个巨大的 try-except-except...except 子句中列出每个可能的异常?
我想捕获一个 Python 异常并打印它而不是重新引发它。例如:
def f(x):
try:
return 1/x
except:
print <exception_that_was_raised>
这应该这样做:
>>> f(0)
'ZeroDivisionError'
无一例外被提出。
有没有办法做到这一点,除了在一个巨大的 try-except-except...except 子句中列出每个可能的异常?
使用message
异常的属性,或者e.__class__.__name__
如果您想要基本异常类的名称,即ZeroDivisionError'
在您的情况下
In [30]: def f(x):
try:
return 1/x
except Exception as e:
print e.message
....:
In [31]: f(2)
Out[31]: 0
In [32]: f(0)
integer division or modulo by zero
在 python 3.x 中,该message
属性已被删除,因此您可以简单地使用print(e)
or e.args[0]
,并且e.__class__.__name__
保持不变。
这就是我的工作方式:
try:
0/0
except Exception as e:
print e
try:
0/0
except ZeroDivisionError,e:
print e
#will print "integer division or modulo by zero"
Something like this, Pythonic duck typing lets us to convert error instances into strings on the fly=) Good luck =)