2015-04-22 113 views
0

我想嘗試一個語句,如果出現錯誤,我希望它打印它接收到的原始錯誤,但也要添加我自己的語句。打印錯誤類型,錯誤語句和自己的語句

我正在尋找這個答案,發現幾乎完成的東西here

下面的代碼也幾乎所有我想要的(我使用Python 2所以它的工作原理):

except Exception, e: 
    print str(e) 

這樣我可以打印錯誤消息,我想我自己的字符串,但它不打印錯誤類型(IOError,NameError等)。我想要的是打印出與正常情況完全相同的訊息(如ErrorType: ErrorString)以及我自己的聲明。

回答

3

如果你要打印的異常信息,您可以使用traceback模塊:

import traceback 
try: 
    infinity = 1/0 
except Exception as e: 
    print "PREAMBLE" 
    traceback.print_exc() 
    print "POSTAMBLE, I guess" 

這給了你:

PREAMBLE 
Traceback (most recent call last): 
    File "testprog.py", line 3, in <module> 
    infinity = 1/0 
ZeroDivisionError: integer division or modulo by zero 
POSTAMBLE, I guess 

您也可以重新拋出異常,而不traceback但是,因爲它是拋出異常,之後無法做任何事情:

try: 
    infinity = 1/0 
except Exception as e: 
    print "PREAMBLE" 
    raise 
    print "POSTAMBLE, I guess" 

注意,在這種情況下,缺乏POSTAMBLE

PREAMBLE 
Traceback (most recent call last): 
    File "testprog.py", line 2, in <module> 
    infinity = 1/0 
ZeroDivisionError: integer division or modulo by zero 
+0

啊,那是更容易的確。 我想我的理想場景是如果我可以在錯誤消息後面打印自己的語句,因爲它更具可讀性。但我也認爲,在籌集資金後,你無法做任何事情。所以除非有一個簡單的方法來提取整個錯誤信息(包括追溯),我認爲你的答案是我能做的最好的:) 謝謝! – RobinAugy

+0

只是一個注意,因爲你現在不在你的except子句中使用錯誤字符串'e',你不能只是改變「除了例外作爲e:」以「除了:」現在嗎? – RobinAugy

0

python docs

try: 
    raise Exception('spam', 'eggs') 
except Exception as inst: 
    print(type(inst)) # the exception instance 
    print(inst.args)  # arguments stored in .args 
    print(inst)   # __str__ allows args to be printed directly, 

將是打印:

<type 'exceptions.Exception'> 
('spam', 'eggs') 
('spam', 'eggs')