2014-09-01 123 views
1

我怎么会在Python3实现这个:移植new.module()到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实际上回报可用于记账模块。

回答

2

new模块已在Python 3.删除您可以使用types.ModuleType代替,在这两个Python 2和3

你有你的电话exec()错;它应该是:

exec(code, module.__dict__) 

您正在尝试从code in module.__dict__表达式执行False结果来代替。使用exec()的功能也适用在Python 2,所以整个主要版本以下工作:

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 
+0

这只是错误在打字的问题提出,实际的问题是正在消失的'new'模块,没办法做'new.module(name)'。将修改我的问题 – Kimvais 2014-09-01 09:42:16

+0

@Kimvais:已经解决。 – 2014-09-01 09:43:01