我正在学习如何设置大型(356 文件)复杂的 Python 程序。除了手动阅读和解析代码之外,有没有什么好的方法来跟踪程序流程呢?
有两种我认为有用的方法:
- 类似于 Bash 的“set -x”
- 显示哪个文件输出每一行输出的东西
是否有任何方法可以执行上述操作,或者您发现任何其他有用的方法?
我正在学习如何设置大型(356 文件)复杂的 Python 程序。除了手动阅读和解析代码之外,有没有什么好的方法来跟踪程序流程呢?
有两种我认为有用的方法:
是否有任何方法可以执行上述操作,或者您发现任何其他有用的方法?
我不知道这是否真的是一个好主意,但是由于我实际上写了一个钩子来显示每行输出到stdout之前的文件和行,所以我还不如给你......</p>
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 或3.x中使用print
魔法逗号)。end=''
但是所有棘手的深 Python 魔法位都在那里。你可以很容易地在它之上构建。
可能非常乏味,但使用调试器跟踪执行流程,逐条指令可能会在一定程度上帮助您。
import pdb
pdb.set_trace()
你可以找一个交叉参考程序。有一个名为 pyxr 的旧程序可以做到这一点。交叉引用的目的是让您知道类如何相互引用。一些IDE也做这种事情。