首页 > 解决方案 > 访问调用函数的变量

问题描述

以下代码

class Foo(object):
    def do_something(self):
        print(main.func_code.co_varnames)
        for item in main.func_code.co_varnames:
            eval(item)

def main():
    a = 1
    b = Foo()
    b.do_something()

main()

将打印

('a', 'b')

以及以结尾的错误消息

name 'a' is not defined

不知何故,一个 Foo 对象能够获取另一个函数的局部变量的名称,但不能对它们做任何事情。我该如何解决?

背景。这个问题是出于调试目的。我希望能够显示有关在我的代码中创建的变量的信息。

标签: pythonvariablesscope

解决方案


  • 用于inspect.currentframe获取堆栈帧对象
  • f_back使用属性将调用堆栈上移 1 帧
  • f_locals通过属性访问该框架的局部变量
import inspect

def get_variables():
    frame = inspect.currentframe().f_back
    print(frame.f_locals)

用法:

def main():
    a = 1
    b = 'hello world'

    get_variables()

main()
# output: {'b': 'hello world', 'a': 1}

推荐阅读