首页 > 编程问答 >无法使用“from x import y”动态导入

无法使用“from x import y”动态导入

时间:2024-07-21 15:22:12浏览次数:5  
标签:python object import

我正在编写一个函数来检查导入文件/模块是否包含任何错误。当我使用模块名称作为变量时,该函数由于某些原因失败。

有效


def importfile1():
    try:
        from test2 import bea
        print('1st scenario:', 'import is successful')
    except:
        print('1st scenario:', 'import failed')
        
importfile1()

不起作用

def importfile2(bank):
    try:
        from test2 import bank
        print('2nd scenario:', 'import is successful')
    except:
        print('2nd scenario:', 'import failed')
        
importfile2(bea)

我希望这两个函数都可以工作。但是,第二个函数失败了。

结果如下所示:

1st scenario: import is successful
2nd scenario: import failed

请问第二个函数失败的原因是什么?


第二个函数失败的原因在于,在 from test2 import bank 语句中, bank 被解释为要导入的 名称 ,而不是一个 变量 。换句话说,Python尝试从 test2 模块中导入名为 bank 的东西,而不是使用 bank 变量的值(即 bea )。

为了实现你想要的功能,你需要使用 importlib 模块。 importlib 允许你动态导入模块和属性。

以下是修改后的 importfile2 函数:

import importlib

def importfile2(module_name, attribute_name):
    try:
        module = importlib.import_module(module_name)
        attribute = getattr(module, attribute_name)
        print('2nd scenario:', 'import is successful')
        return attribute
    except (ImportError, AttributeError):
        print('2nd scenario:', 'import failed')

bea = importfile2('test2', 'bea') 

在这个修改后的代码中:

  1. 我们首先使用 importlib.import_module(module_name) 动态导入名为 module_name 的模块。
  2. 然后,我们使用 getattr(module, attribute_name) 从导入的模块中获取名为 attribute_name 的属性。
  3. 如果导入或获取属性成功,我们将打印成功消息并返回获取的属性。
  4. 如果出现 ImportError (模块无法导入)或 AttributeError (模块中不存在该属性),我们将打印失败消息。

现在,当你调用 importfile2('test2', 'bea') 时,它将从 test2 模块成功导入 bea

标签:python,object,import
From: 78635632

相关文章