在Python中打印异常,而不是提高它们

时间:2012-11-13 15:54:18

标签: python exception exception-handling

我想捕获Python异常并打印它而不是重新提升它。例如:

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

然后应该这样做:

>>> f(0)
'ZeroDivisionError'

没有例外被提出。

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

3 个答案:

答案 0 :(得分:9)

如果您需要Base异常类的名称,请使用异常的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)e.args[0]e.__class__.__name__保持不变。

答案 1 :(得分:3)

这就是我的工作方式:

try:
    0/0
except Exception as e:
    print e

答案 2 :(得分:2)

try:
    0/0
except ZeroDivisionError,e:
    print e
#will print "integer division or modulo by zero"

像这样的东西, Pythonic duck typing让我们可以在飞行中将错误实例转换为字符串=) 祝你好运=)