2017-03-03 9 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 

ありますかif-elifを使用しないようにするにはどうすればよいですか?だから何とか自動的に?

のような:

@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

のインポート

を除き、/場合は、使用しようとする通常のだ、私たちはしばしばPython2/3互換性のあるコードを書いたり避けるためにif elseまたはtry catchステートメントを使用しますimport errors。これは非常に一般的です。

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

それともあなただけの新しい名前としてそれらをインポートすることができ、と改名されましたexception.Afterモジュールを調達するtry catchを使用しています。

try: 
    import mod 
except ImportError: 
    import somemodule as mod 

しかし、それはPythonでモジュールをインポートする外部スクリプトに依存する珍しいですwork.Itスクリプトを作るために外部スクリプトを使用するには、悪い習慣です。