python2.7和python3.x中的不同实现

2024-09-23 06:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python 3中,我有这样的功能:

def aFunctionImportingAndCallingAnotherFunction(functionName, args):
    packageString = "a_nested_package.to_be_imported.at_run_time"
    _temp = __import__(packageString, globals(), locals(), [functionName], 0)
    function = eval("_temp." + functionName)
    return function(args)

在Python2.7中,我得到一个错误,我用functionName传递的函数不存在。在

在这个例子中,包a_nested_packagesys.path中,它有一个包to_be_imported,它有一个包at_run_time。所有包都有__init__.py个文件。在

我试过了:

  • 玩level参数(我尝试了-1和1)
  • 正在从packageString中删除{}
  • packageString中删除a_nested_package,并将其替换为.

另外,如果这是做运行时导入函数完全错误的方法,请让我知道!我对Python(来自C++、PHP和java)

非常陌生

Tags: to函数runpackagetime错误argsfunction
2条回答

__import__的工作方式与import语句相同。(有充分的理由)

执行此操作时:

import foo.bar.baz

你的文件中没有baz对象;你得到了foo!同样,这:

^{pr2}$

返回foo模块,但要保证它是用bar填充的。在

因此在您的示例中,__import__返回{},您必须自己遍历路径的其余部分。这很糟糕,这就是importlib有用的原因。:)

{{1}从模块中动态检索{a1},然后使用该模块的名称^ 2动态检索:

import importlib

def aFunctionImportingAndCallingAnotherFunction(functionName, args):
    module = importlib.import_module(packageString)
    func = getattr(module, functionname)
    return func(*args)

相关问题 更多 >