我有一个特殊的任务,要求我跟踪任意python代码中任意变量的使用。我需要以树形结构递归获取以下信息:
例如,在下面的代码中:
a=1
b=a
def funA(a):
print(a)
def funB():
funA(a)
def funC():
print(b)
使用全局变量a的跟踪记录为:
a------b
| |
| |---print
| |
| |---funC
|
|---print
|
|---funA
|
|---funB
我想知道是否存在可以用于此任务的现有工具。如果没有这样的工具,那么我应该首先学习什么背景知识来构建这样的工具。谢谢。
答案 0 :(得分:3)
简短的回答:您不能。
长答案:可以,但是您将不得不写一些看起来很像编译器的东西。您可能会“仅仅”为python编写一个解析器,并对在何处使用符号在哪些范围内用于计算其他符号进行静态分析。但是,正如其他人提到的那样,如果必须进行完整的分析,则python的动态性质将是造成严重头痛的原因。无论程序多么聪明,您都会遇到静态分析根本无法完成的情况。
通常,您可以期望很多工作可以使某件事完全起作用,甚至可以完成更多工作来涵盖某人可能在某处所做的所有不同的python聪明用法,从而导致您的程序充其量会产生错误并巧妙地产生最坏的输出错误。没有什么比错误更糟糕了,不是编译器中的错误,不是编译器。