【发布时间】:2016-06-18 04:30:40
【问题描述】:
我正在尝试创建一个自定义 python 解释器类型的应用程序。我正在使用 exec 语句(在 Python 2.7.6 中)来执行给定的代码,但全局变量并没有像预期的那样工作。有人可以解释为什么这不起作用:
def print_x():
print(x)
g = {'x': 10, 'print_x': print_x}
l = {}
exec('print_x()', g, l)
结果(无论print_x函数是g还是l),都是错误的:
NameError: global name 'x' is not defined
那么,传递给 exec 的全局变量不会传递给被调用的函数吗?
【问题讨论】:
-
所以 exec 不知道如何解析你的字典 g
-
但我可以使用 exec('print(x)', g, l) 就好了。它只是不适用于 print_x 函数。
-
stackoverflow.com/questions/2904274/… - 似乎与您的情况相似
-
感谢您提供该链接。它与我的程序相似但不完全相同。我现在尝试在 print_x() 函数中打印出 globals() 和 locals() ,果然,'x' 不存在。我只是不太清楚为什么会这样。
标签: python