Python 从堆栈跟踪中获取更多细节
有没有一种方便的方法来获取Python异常的更详细堆栈跟踪?我希望找到一个包装器实用程序/模块或其他方法来从堆栈跟踪中获取更多信息,而不必实际修改生成它的Python脚本。我希望能够在运行单元测试或doctest时,或者在从shell运行实用程序或内联脚本时使用它Python 从堆栈跟踪中获取更多细节,python,debugging,stack-trace,Python,Debugging,Stack Trace,有没有一种方便的方法来获取Python异常的更详细堆栈跟踪?我希望找到一个包装器实用程序/模块或其他方法来从堆栈跟踪中获取更多信息,而不必实际修改生成它的Python脚本。我希望能够在运行单元测试或doctest时,或者在从shell运行实用程序或内联脚本时使用它 具体地说,我想我想要局部变量的值,或者可能只是传递给堆栈跟踪中最内层函数的参数的值。一些设置细节级别的选项会很好。您看过回溯模块吗 此外: 与您的问题没有特别关系,但您可能会发现这段代码很有用——在发生致命异常时自动启动py
具体地说,我想我想要局部变量的值,或者可能只是传递给堆栈跟踪中最内层函数的参数的值。一些设置细节级别的选项会很好。您看过回溯模块吗
回溯
成员,并从其帧(tbu帧
)转储信息。有关这些类型的更多信息,请参见python
以下是一个例子:
def killit(a):
a[10000000000000] = 1
def test(a):
killit(a)
def iterate_traceback(tb):
while tb is not None:
yield tb
tb = tb.tb_next
try:
test(tuple())
except Exception as e:
import sys
exception_info = sys.exc_info()
traceback = exception_info[2]
for tb in iterate_traceback(traceback):
print "-" * 10
print tb.tb_frame.f_code
print tb.tb_frame.f_locals
print tb.tb_frame.f_globals
嘿,谢谢你。最后,我将您的代码包装在一个脚本中,以便使用
python-mcorniner some_script.py
调用pdb调试。希望没问题吧?我在文件里给了你归属。稍后,我可能会更改模块,以便像我希望的那样吐出堆栈跟踪,这样我就不必用pdb将它们挖出来,这样我就可以将其用于单元测试等。但同时,这可能对某些人有用。嘿,我刚刚意识到,你也可以用ipython
来做这件事。在传递-c…
或文件名之前,先传递-pdb
选项。它似乎不支持-m…
,但也许可以通过将/usr/lib/python../runpy.py
作为文件名来实现。
def killit(a):
a[10000000000000] = 1
def test(a):
killit(a)
def iterate_traceback(tb):
while tb is not None:
yield tb
tb = tb.tb_next
try:
test(tuple())
except Exception as e:
import sys
exception_info = sys.exc_info()
traceback = exception_info[2]
for tb in iterate_traceback(traceback):
print "-" * 10
print tb.tb_frame.f_code
print tb.tb_frame.f_locals
print tb.tb_frame.f_globals