在Python中,我如何提出自定义异常并进行追溯?

In Python how can I raise a custom exception and do a trace back as well?

本问题已经有最佳答案,请猛点这里访问。

我是python的新手。 我知道如何在python中引发**自定义异常**,并在stdout上打印一条消息。 但是当我处理多个模块和长代码时,在用消息引发异常的同时,我还可以追溯吗? 我的意思是追溯是获取错误行,还是说出发生异常的函数和模块名称? 我知道我发布的消息可以通过添加更多详细信息的方式进行修改。 但我想知道是否有任何内置的方式来做到这一点。


您不必"生成"回溯,Python在您引发异常(自定义或内置)时会处理此问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Python 2.7.3 (default, Feb 27 2014, 19:58:35)
[GCC 4.6.3] on linux2
Type"help","copyright","credits" or"license" for more information.
pythonrc start
pythonrc done
>>> class MyException(Exception): pass
...
>>> def foo():
...     raise MyException("Hey")
...
>>> def bar():
...    print"in bar"
...    foo()
...
>>> bar()
in bar
Traceback (most recent call last):
  File"<stdin>", line 1, in <module>
  File"<stdin>", line 3, in bar
  File"<stdin>", line 2, in foo
__main__.MyException: Hey
>>>

这个问题已在这里得到解答:

  • Python中的"内部异常"(带回溯)?

引用Glenn Maynard的回应:

这很简单; 将traceback作为第三个参数传递给raise。

1
2
3
4
5
6
7
import sys
class MyException(Exception): pass

try:
    raise TypeError("test")
except TypeError, e:
    raise MyException(), None, sys.exc_info()[2]

在捕获一个异常并重新引发另一个异常时始终执行此操作。