关于python:打印错误类型,错误语句和自己的语句

Print error type, error statement and own statement

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

我在找这个答案,找到了一些几乎完整的答案。

以下代码几乎满足了我的所有需求(我使用的是python 2,所以它可以工作):

1
2
except Exception, e:
    print str(e)

这样我就可以打印错误消息和我想要的字符串,但是它不打印错误类型(IOErrorNameError等)。我希望它能打印出与平时完全相同的信息(所以ErrorType: ErrorString加上我自己的声明)。


如果要打印异常信息,可以使用traceback模块:

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

这给了你:

1
2
3
4
5
6
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的情况下重新引发异常,但是,由于这是一个异常被抛出,因此以后不能执行任何操作:

1
2
3
4
5
6
try:
    infinity = 1 / 0
except Exception as e:
    print"PREAMBLE"
    raise
    print"POSTAMBLE, I guess"

注意在这种情况下缺少POSTAMBLE

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


从python文档:

1
2
3
4
5
6
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,

将打印:

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