python - 无一异常(exception)地获取 python 回溯

标签 python stack-trace pretty-print

假设您有这些模块:

模块1.py
import module2

def a():
    module1.b()

def c():
    print "Hi guys!"

模块2.py
import module1

def b():
    module1.c()

我想要一个函数 func(a()) 产生与此类似的输出:(=a traceback ?)

 /usr/local/lib/python2.7/dist-packages/test/module1.py
   3 def a():
   4     module1.b()

   1 import module1

 /usr/local/lib/python2.7/dist-packages/test/module2.py
   3 def b():
   4     module1.c()

   1 import module2

 /usr/local/lib/python2.7/dist-packages/test/module1.py
   6 def c():
   7     print "Hi guys!"

标准模块 traceback 和/或 cgitb 和/或 inspect 可能是可行的,但我很难弄清楚这些模块来自文档。

我认为可以执行 traceback.print_stack(a()) 但由于某种原因它一直在永远加载。我尝试了这些模块中的其他功能,但没有成功。

更新 3

@jterrace

python trapy_module.py :

import trace

def trapy(arg):
    tracer = trace.Trace()
    tracer.run(arg)
    r = tracer.results()
    r.write_results()

if __name__ == '__main__':
    import random
    trapy('random.random()')

现在当我这样做时: python trapy_module.py 我得到:

--- modulename: trapy, funcname: <module>
<string>(1): 

import random 替换为 import pyglet 并将 random.random() 替换为 pyglet.app.run() 继续运行,不输出任何东西。

最佳答案

traceback.print_stack对我来说效果很好:

>>> import traceback
>>> def what():
...    traceback.print_stack()
... 
>>> def hey():
...    what()
... 
>>> hey()
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in hey
  File "<stdin>", line 2, in what

更新:

您已经明确表示您真的不需要回溯。您需要跟踪信息。您可以通过以下方式获取一些跟踪信息:

#tracetest.py

def what():
    return 3

def hey():
    return what()

def yo():
    return hey()

import trace
tracer = trace.Trace()
tracer.run("yo()")
r = tracer.results()
r.write_results()

并运行上面的代码:

$ python tracetest.py
 --- modulename: tracetest, funcname: <module>
<string>(1):   --- modulename: tracetest, funcname: yo
tracetest.py(8):     return hey()
 --- modulename: tracetest, funcname: hey
tracetest.py(5):     return what()
 --- modulename: tracetest, funcname: what
tracetest.py(2):     return 3

关于python - 无一异常(exception)地获取 python 回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11037109/

相关文章:

python - 将 ctypes 类型数组转换为 void 指针时出现 Numpy 错误

java - 有没有办法在重定向到错误页面(在 Java 中)之前捕获错误的堆栈跟踪?

android - 如何在 Android 上打印堆栈跟踪(带有符号函数名称)?

mysql - 如何将带有虚线的sql查询响应存储到文本文件中?

javascript - 如何在javascript中打印漂亮的xml?

java - 如何打印ArrayLists的ArrayList,以便将每个内部列表打印在一行上?

python - 接受一个字符串并返回 8 个字符的字符串列表的函数

python : font_name and bold property not working together in kivy

python - PyTorch:预期输入batch_size (12) 匹配目标batch_size (64)

python - 从代码中的方法打印当前调用堆栈