打印错误类型、错误声明和自己的声明
Print error type, error statement and own statement
我想尝试一个语句,如果有错误,我希望它打印它收到的原始错误,但也向其中添加我自己的语句。
我一直在寻找这个答案,找到了几乎完整的东西 here。
下面的代码几乎完成了所有我想要的(我正在使用 Python 2 所以它有效):
except Exception, e:
print str(e)
这样我可以打印错误消息和我自己想要的字符串,但它不会打印错误类型(IOError
、NameError
等)。我想要的是它打印出它通常会打印的完全相同的消息(所以 ErrorType: ErrorString
)加上我自己的声明。
如果要打印异常信息,可以使用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
来自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')
我想尝试一个语句,如果有错误,我希望它打印它收到的原始错误,但也向其中添加我自己的语句。
我一直在寻找这个答案,找到了几乎完整的东西 here。
下面的代码几乎完成了所有我想要的(我正在使用 Python 2 所以它有效):
except Exception, e:
print str(e)
这样我可以打印错误消息和我自己想要的字符串,但它不会打印错误类型(IOError
、NameError
等)。我想要的是它打印出它通常会打印的完全相同的消息(所以 ErrorType: ErrorString
)加上我自己的声明。
如果要打印异常信息,可以使用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
来自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')