2017-03-03 28 views
0

有什麼好的方法來導入基於某些變量值的不同模塊? 我的例子:Python 3自動條件導入?

我有不同的模塊文件夾:

  • module_a.py
  • module_b.py

而在其他一些Python文件,我想無論是進口還是module_a module_b基於一些配置值:

if configVal == 'a': 
    import module_a 
elif configVal == 'b': 
    import module_b 

Is there避免使用if-elifs的一些方法?所以不知何故自動?

喜歡:

@conditionalImport(configVal) 
import module_ 

還是什麼聰明嗎?

+1

你可以叫'importlib.import_module()'編程,如果你擔心這個由於這種類型的任務自動化大量的模塊。對於2來說,它會更多的代碼,你會避免。 – Adirio

+1

請注意,使用if來決定導入哪個模塊是完全正常的。看看官方的['os'模塊](https://github.com/python/cpython/blob/3.6/Lib/os.py)源代碼。 – farsil

回答

1

您可以使用內建的__import__來將模塊名稱聲明爲字符串。

這樣,你就可以在模塊名執行正常的字符串操作:

module = __import__("module_{}".format(configVal)) 
+0

謝謝,這可以工作! – waszil

0

這是正常使用,如果/嘗試,除了進口

例如

import sys 
if sys.version_info > (2, 7): 
    import simplejson as json 
else: 
    import json 
0

由於事實上,我們經常使用if elsetry catch語句來寫Python2/3兼容的代碼或避免import errors。這是很常見的。

if sys.version_info[0] > 2: 
    xrange = range 

或者使用try catch提高已更名爲 exception.After模塊,你可以導入它們作爲新名稱。

try: 
    import mod 
except ImportError: 
    import somemodule as mod 

但它是不好的做法,使用外部腳本來使你的腳本work.It是不尋常的依賴於外部腳本導入Python模塊。