在Python中如何抛出自定义异常并进行追踪?

2 投票
2 回答
9126 浏览
提问于 2025-04-18 13:49

我刚开始学习Python。我知道怎么在Python中抛出一个**自定义异常**,并且可以在标准输出上打印一条消息。但是当我处理多个模块和较长的代码时,抛出异常时带上消息,我能否追踪到出错的地方呢?我说的追踪就是能找到出错的行,或者说出错的函数和模块名?我知道我可以修改我输出的消息,添加更多详细信息。但我在想有没有什么内置的方法可以做到这一点。

2 个回答

-2

这个问题在这里已经有人回答过了:

引用那里的回答,来自Glenn Maynard:

其实很简单;把回溯信息作为第三个参数传给raise。

import sys
class MyException(Exception): pass

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

在捕获一个异常后,再重新抛出另一个异常时,记得总是这样做。

3

你不需要自己去“生成”错误追踪信息,当你抛出一个异常(无论是自定义的还是内置的)时,Python会自动处理这个事情。

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
>>> 

撰写回答