首页 > 解决方案 > 如何在一段代码中跟踪变量的使用?

问题描述

我有一个特殊的任务,需要我在任何一段 python 代码中跟踪任意变量的使用。我需要以递归方式获取树结构中的以下信息:

  1. 什么函数正在使用这个变量。
  2. 哪些变量正在引用或作为该变量的副本。
  3. 调用 1 中函数的函数和引用 2 中变量的变量。

例如,在下面的一段代码中:

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

我想知道是否有可用的现有工具来完成这项任务。如果没有这样的工具,我应该先学习什么背景知识来构建这样的工具。谢谢。

标签: python

解决方案


简短的回答:你不能。

长答案:你可以,但你将不得不编写一些看起来很像编译器的东西。您可能会“仅仅”为python编写一个解析器,并对符号在哪个范围内用于计算哪些其他符号进行一些静态分析。然而,正如其他人所提到的,如果必须完成该分析,python 的动态特性将是导致严重头痛的原因。无论程序多么聪明,您都会遇到静态分析根本无法做到的情况。

通常,您可以期望做很多工作才能使某些东西正常工作,甚至需要更多工作来涵盖某人将在某处完成的所有不同的python巧妙用途,这会导致您的程序充其量会遇到错误并产生微妙的错误输出最坏的。没有什么比错误更糟糕的了,那不是错误,在编译器中,那不是编译器。


推荐阅读