寻找此代码为何引发的良好解释SyntaxError
.
def echo(x):
return x
def foo(s):
d = {}
exec(s, {}, d)
return dict((x,y) for x,y in d.items())
def bar(s):
d = {}
exec(s, {}, d)
return dict((x, echo(y)) for x,y in d.items()) # comment this to compile
s = 'a=1'
foo(s)
File "test.py", line 11
exec(s, {}, d)
SyntaxError: unqualified exec is not allowed in function 'bar' it contains a
nested function with free variables
在Python 2.x中,exec
语句可能不会出现在具有带有自由变量的局部“函数”的函数内部。生成器表达式隐式定义了应在每次迭代中执行的代码的某种“函数”(或更准确地说,代码对象)。在foo()
,此代码仅包含对x
and y
,它们是生成器表达式内的本地名称。在bar()
,代码还包含对自由变量的引用echo
,这取消了资格bar()
供使用exec
.
另请注意,您的exec
语句可能应该读为
exec s in {}, d
这会将它们变成合格的exec 语句,使代码有效。
请注意,您的代码可以在 Python 3.x 中运行。exec()
已经变成函数,不能再修改封闭函数的局部变量,从而对使用进行了上述限制exec
不必要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)