打印错误类型、错误声明和自己的声明

Print error type, error statement and own statement

我想尝试一个语句,如果有错误,我希望它打印它收到的原始错误,但也向其中添加我自己的语句。

我一直在寻找这个答案,找到了几乎完整的东西 here

下面的代码几乎完成了所有我想要的(我正在使用 Python 2 所以它有效):

except Exception, e: 
    print str(e)

这样我可以打印错误消息和我自己想要的字符串,但它不会打印错误类型(IOErrorNameError 等)。我想要的是它打印出它通常会打印的完全相同的消息(所以 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')