3

我想捕获一个 Python 异常并打印它而不是重新引发它。例如:

def f(x):
    try:
        return 1/x
    except:
        print <exception_that_was_raised>   

这应该这样做:

>>> f(0)
'ZeroDivisionError'

无一例外被提出。

有没有办法做到这一点,除了在一个巨大的 try-except-except...except 子句中列出每个可能的异常?

4

3 回答 3

9

使用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__保持不变。

于 2012-11-13T15:55:54.237 回答
3

这就是我的工作方式:

try:
    0/0
except Exception as e:
    print e
于 2012-11-13T16:06:45.383 回答
2
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 =)

于 2012-11-13T16:30:06.807 回答