我正在学习如何设置一个大型(356个文件),复杂的Python程序。除了手动读取和解析代码之外,还有什么好方法可以跟踪程序流程吗?
我认为有两种方法很有用:
是否有任何方法可以执行上述操作,或者您认为有用的任何其他方法?
答案 0 :(得分:1)
我不知道这是不是一个好主意,但是因为我实际上写了一个钩子来在每行输出到stdout之前显示文件和行,所以我不妨把它给你...
import inspect, sys
class WrapStdout(object):
_stdout = sys.stdout
def write(self, buf):
frame = sys._getframe(1)
try:
f = inspect.getsourcefile(frame)
except TypeError:
f = 'unknown'
l = frame.f_lineno
self._stdout.write('{}:{}:{}'.format(f, l, buf))
def flush(self):
self._stdout.flush()
sys.stdout = WrapStdout()
只需将其保存为模块,并在import
之后,每个stdout块都将以文件和行号为前缀。
当然,如果:
,这将变得非常丑陋stdout.write
,或使用2.x中的print
魔术逗号或3.x中的end=''
。但是所有棘手的深度Python魔术都在那里;你可以很容易地在它之上构建。
答案 1 :(得分:1)
可能非常繁琐,但是使用调试器来跟踪执行流程,逐条指令可能会在某种程度上帮助你。
import pdb
pdb.set_trace()
答案 2 :(得分:0)
您可以寻找交叉参考计划。有一个名为pyxr的旧程序可以做到这一点。交叉引用的目的是让您了解类如何相互引用。一些IDE也做了这样的事情。
答案 3 :(得分:0)