假设您有这些模块:
模块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/