全部,
我有一个类似于问题 2617120 的问题,可在此处找到:
当通过跟踪钩子执行 python 打印输出函数参数时,提问者需要指针。
我正在寻找与此非常相似但有所不同的东西。我不想在代码运行时对代码进行评估,并打印出所有评估过的变量,而不是所有数据。例如,使用以下代码:
for modname in modnames:
if not modname or '.' in modname:
continue
...
跟踪挂钩将导致打印出以下内容:
for modname in modnames: | for init in init,., encoding
|
if not modname or '.' in modname: | if not init or '.' in init
continue | continue
if not modname or '.' in modname: | if not . or '.' in .
... |
其中代码行根据运行帧进行插值。我已经在 perl 中做到了这一点,在某些情况下它是救命稻草。
有人对在 python 中执行此操作的最佳方式有想法吗?我有我的想法,但我想听听人们的想法(以及他们是否有任何预先制定的解决方案)
这里,顺便说一句是参考代码:
import sys
import linecache
import random
def traceit(frame, event, arg):
if event == "line":
lineno = frame.f_lineno
filename = frame.f_globals["__file__"]
if filename == "<stdin>":
filename = "traceit.py"
if (filename.endswith(".pyc") or
filename.endswith(".pyo")):
filename = filename[:-1]
name = frame.f_globals["__name__"]
line = linecache.getline(filename, lineno)
print "%s:%s:%s: %s" % (name, lineno,frame.f_code.co_name,line.rstrip())
return traceit
def main():
print "In main"
for i in range(5):
print i, random.randrange(0, 10)
print "Done."
sys.settrace(traceit)
main()