我对基于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})

07-24 22:12