如果我有一个异常被引发,捕获,然后再次在except:block中引发的场景,有没有办法捕获引发它的初始堆栈帧?
作为python出口打印的堆栈跟踪描述了第二次引发异常的位置。有没有办法引发异常,以便显示最初抛出异常的堆栈帧?
答案 0 :(得分:11)
通过再次指定异常实例来重新引发异常是一个常见错误,如下所示:
except Exception, ex:
# do something
raise ex
这会剥离原始的追溯信息并开始一个新的追溯信息。你应该做的是这个,没有明确指定例外(即使用“裸”raise
):
except Exception, ex:
# do something
raise
这将保留堆栈跟踪中的所有原始信息。有关有些帮助的背景,请参阅this section in the docs。