Python:从名为变量

时间:2017-03-07 19:36:23

标签: python getattr python-importlib

我有一个包含函数./model_scripts/medians.py的文件predict_volume()。 [下面给出的bash终端中tree的输出]

 model_scripts
 ├── __init__.py
 ├── medians.py
 └── ...

我需要将此函数导入另一个python脚本,其中必须从中导入函数的python脚本的名称(即medians.py)采用字符串变量的形式。我写的代码是:

model_name = 'medians'
...
model = getattr(__import__('model_scripts'), model_name)
vol = model.predict_volume()

但是我在第一行收到以下错误:

AttributeError: 'module' object has no attribute 'medians'

在阅读其他答案(here)后,我在__init__.py目录中添加了model_scripts。但我仍然得到上述错误。

This回答建议使用importlib

import importlib
model_name = 'medians'
...
model = importlib.import_module('model_scripts.'+model_name)
vol = model.predict_volume()

对于为什么第一种方法不起作用而第二种方法不起作用的任何见解都会表示赞赏。

1 个答案:

答案 0 :(得分:2)

此处__import__的正确语法是使用fromlist

以下作品(阅读here):

model = getattr(__import__('model_scripts', fromlist=[model_name]), model_name)