2014-09-01 127 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