将new.module()移植到Python3
我该如何在Python3中实现这个呢:
def import_code(code, name, add_to_sys_modules=False):
module = new.module(name)
sys.modules[name] = module
do_bookkeeping(module)
exec(code in module.__dict__)
return module
看起来无论是 __import__
还是 importlib
都并没有真正 返回 可以用来做记录的模块。
1 个回答
4
在Python 3中,new
模块已经被移除了。你可以在Python 2和3中使用types.ModuleType
来代替。
你的exec()
调用写错了,应该是:
exec(code, module.__dict__)
你现在试图执行的是code in module.__dict__
这个表达式返回的False
结果。其实在Python 2中,exec()
作为一个函数也是可以用的,所以下面的写法在主要版本中都是有效的:
import types
def import_code(code, name, add_to_sys_modules=False):
module = types.ModuleType(name)
if add_to_sys_modules:
sys.modules[name] = module
do_bookkeeping(module)
exec(code, module.__dict__)
return module