【问题标题】:Porting new.module() to Python3将 new.module() 移植到 Python3
【发布时间】:2014-09-01 09:37:24
【问题描述】:

我将如何在 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 都没有返回可用于记账的模块。

【问题讨论】:

    标签: python python-3.x import


    【解决方案1】:

    new 模块已从 Python 3 中删除。您可以在 Python 2 和 3 中改用 types.ModuleType

    你的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
    

    【讨论】:

    • 这只是输入问题时的错误,实际问题是new 模块消失了,无法执行new.module(name)。将修改我的问题