在python中检索双重引发的异常原始堆栈跟踪

时间:2009-12-23 14:54:31

标签: python exception

如果我有一个异常被引发,捕获,然后再次在except:block中引发的场景,有没有办法捕获引发它的初始堆栈帧?

作为python出口打印的堆栈跟踪描述了第二次引发异常的位置。有没有办法引发异常,以便显示最初抛出异常的堆栈帧?

1 个答案:

答案 0 :(得分:11)

通过再次指定异常实例来重新引发异常是一个常见错误,如下所示:

except Exception, ex:
     # do something
     raise ex

这会剥离原始的追溯信息并开始一个新的追溯信息。你应该做的是这个,没有明确指定例外(即使用“裸”raise):

except Exception, ex:
    # do something
    raise

这将保留堆栈跟踪中的所有原始信息。有关有些帮助的背景,请参阅this section in the docs