奇怪的未定义变量python3

时间:2015-02-26 10:51:36

标签: python load python-3.4 nameerror

我正在尝试动态加载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

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您不能使用exec()(或eval())来设置局部变量;本地命名空间是高度优化的。

您正在查看的是locals()字典,它是本地命名空间的单向反映;该名称已添加到该字典中,但未添加到真实名称空间。

改为使用专用命名空间:

namespace = {}
exec(open(test_file).read(), namespace)
print(namespace['test_list'])