我正在尝试动态加载python文件并检索其变量。
这是我的代码:
test_files = glob.glob("./test/*.py")
for test_file in test_files:
exec(open(test_file).read())
print(dir())
print(test_list)
test_file
是我想要检索的共享变量。
print(dir())
显示:['test_file', 'test_files', 'test_list']
所以test_list
存在。
之后的一行:
print(test_list)
显示回溯:
NameError: name 'test_list' is not defined
我错过了什么?
答案 0 :(得分:2)
您不能使用exec()
(或eval()
)来设置局部变量;本地命名空间是高度优化的。
您正在查看的是locals()
字典,它是本地命名空间的单向反映;该名称已添加到该字典中,但未添加到真实名称空间。
改为使用专用命名空间:
namespace = {}
exec(open(test_file).read(), namespace)
print(namespace['test_list'])