我对基于https://stackoverflow.com/a/10303539/4113228的代码段有问题
当我尝试编译时:
import types
dynf = types.FunctionType(compile('print("wow")', 'dyn.py', 'exec'), {})
dynf()
在使用python2.7的文件test.py中,一切正常,
但是当我尝试使用python3.5时,我得到:
Traceback (most recent call last):
File "test.py", line 3, in <module>
dynf()
File "dyn.py", line 1, in <module>
NameError: name 'print' is not defined
我是python编码的新手,我完全陷入了困境。.非常感谢您的帮助!
最佳答案
问题是您要传递一个空字典作为globals
-因此,编译后的代码无法访问全局变量或内置函数。
要允许访问内置函数,请使用
import builtins
dynf = types.FunctionType(compile('print("wow")', 'dyn.py', 'exec'), {'__builtins__':builtins})