我正在学习2.7.6上 eval , exec 和编译的基础知识。
我在 exec 上遇到了障碍,因为我在运行时遇到错误:
exec 'print 5'
错误:
SyntaxError:函数'main'中不允许使用unqualified exec 包含一个带有自由变量的嵌套函数(EvalExecCompile.py, 第61行
我发现 exec 是2.7.6中的表达式,而3.x中的函数。问题是,我找不到一个可以在2.7.6中学习 exec 的实例。
我知道使用 exec 等所有的危险,但只是想学习如何使用它们包装我曾经需要它们。
有人可以帮忙吗?也许提供一个我可以剖析的工作实例?
谢谢。
我的问题的目标是学习如何正确使用2.7.6中的 exec 。
答案 0 :(得分:2)
除非指定上下文,否则不能在具有子功能的函数中使用exec。来自文档:
如果在函数中使用了exec,并且该函数包含嵌套块 使用自由变量,编译器将引发一个SyntaxError,除非 exec显式指定了exec的本地名称空间。 (其他 单词," exec obj"将是非法的,但是" exec obj在ns(命名空间)"将会 合法的。)
以下是实施exec
的代码:
def test2():
"""Test with a subfunction."""
exec 'print "hi from test2"' in globals(), locals()
def subfunction():
return True
test2()
此示例取自:In Python, why doesn't exec work in a function with a subfunction?