python - 访问调用函数的变量
问题描述
以下代码
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 对象能够获取另一个函数的局部变量的名称,但不能对它们做任何事情。我该如何解决?
背景。这个问题是出于调试目的。我希望能够显示有关在我的代码中创建的变量的信息。
解决方案
- 用于
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}
推荐阅读
- django - 如何在 Django 中获取关注我的用户数量
- python - 在 NetworkX 中计算图形对象的拉普拉斯矩阵
- reactjs - 阻止单击一次 span 元素上的 onClick 事件
- akka-http - 如何使用 akka http 为 application/schema+json 创建 ContentType?
- json - Python API(JSON) 转 CSV
- javascript - 无法使用 nuxt,js 在 Strapi 中读取未定义的属性“url”
- python - 如何使用 Python (boto3) 确定哪些 EC2 实例具有 CloudWatch 代理?
- r - 如何在字符串中搜索以查找模式
- sql-server - “创建目录”在 SSIS 中显示为灰色
- asp.net-core-webapi - NSwag 无法识别自定义授权属性