如何逐步完成Python表达式评估过程?

Aiv*_*var 7 python debugging pdb

我想构建一个可视化调试器,它可以帮助编程学生了解表达式评估是如何进行的(子表达式如何通过它们的值进行评估和"替换",例如Excel中的表达式评估可视化器).

看起来你不能用Python的pdb来完成这个过程,因为它最好的步骤粒度就是代码行.是否有可能逐步通过Python字节码?任何其他想法如何实现这一目标?

编辑:我需要一个可以在CPython标准库之上构建的轻量级解决方案.

Aiv*_*var 2

我自己也有一个解决方案的想法——我可以通过将所有(子)表达式包装在虚拟方法调用中来检测代码(或 AST),该方法除了返回其参数之外什么也不做。例如。

x = f(sin(x + y))
Run Code Online (Sandbox Code Playgroud)

变成

x = dummy(f(dummy(sin(dummy(dummy(x) + dummy(y))))))
Run Code Online (Sandbox Code Playgroud)

这样,我保证在每个子表达式被求值后收到通知,并且我也得到了值。我还可以添加有关当前处理表达式的哪一部分的额外位置/AST 信息,例如:

... dummy(x, line=23, col=13, length=1) ...
Run Code Online (Sandbox Code Playgroud)

不幸的是,这需要搞乱 AST 和编译......