2012-11-13 35 views
3

我想捕获一个Python异常并打印它,而不是重新提升它。例如:在Python中打印异常,而不是提高它们

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

那么这应该这样做:

>>> f(0) 
'ZeroDivisionError' 

没有异常被提出。

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

回答

9

使用异常或e.__class__.__name__message属性,如果你想在基本异常类的名称,即: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 

在蟒蛇3.x中message属性已被删除,所以你可以简单地那里使用print(e)e.args[0],并且e.__class__.__name__保持相同。

+1

或者如果你只是想要例外的名字:'print e .__ class __.__ name__' – mgilson

+0

@ mgilson的评论实际上是OP所要求的; 'print repr(e)'也可以。 –

+0

不错,但是如果你提出一个'class Whoa:pass'的实例,那么这将不起作用。# –

3

这是我的工作方式:

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

这样的事情, Python化鸭打字让我们错误实例转换成字符串上飞=) 祝你好运=)