2012-11-13 70 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化鴨打字讓我們錯誤實例轉換成字符串上飛=) 祝你好運=)