2017-03-07 40 views
2

我有一個包含函數predict_volume()的文件./model_scripts/medians.py。 [在bash的終端的tree輸出下面給出]Python:從名稱爲變量的文件導入函數

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__.pymodel_scripts目錄。但我仍然收到上述錯誤。使用importlib

This回答提示:

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

希望瞭解爲什麼第方法是行不通的,但第二次卻任何見解。

+0

首先是相當於從'導入model_scripts medians'和第二相當於'進口model_scripts.medians',這是兩個不同的請求。 – cdhowie

+0

@cdhowie:是不是我通過輸入'model = getattr(__ import __('model_scripts'),model_name)'與'model = model_scripts.medians'相同? – IM94

+0

應該是。這假設'model_scripts'甚至導出'medians'。 '從model_scripts導入中值'是否按照您認爲應該的方式工作? – cdhowie

回答

2

此處__import__的正確語法是使用fromlist以及它。

以下作品(讀here):

model = getattr(__import__('model_scripts', fromlist=[model_name]), model_name) 
相關問題