2015-04-22 110 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')