2016-04-18 6 views
2

大きなプロジェクトで作業する場合、私はエラーの検出と処理に非常に熱心です。ユーザーがインストールしたモジュールとインストールしていないモジュールがあるので、この可能性を考慮する必要があります。不足しているモジュールを動的に検出する(Python)

私は、モジュールをインポートしようとしている間に見つからないモジュールを検出する方法を知りたいと思います。現在、私は、ImportErrorsを監視し、エラー生成モジュールの名前をリストに追加するtry/exceptブロックのセットを持っています。

現在のコード:

errors = [] 
try: 
    import socket 
except ImportError: 
    errors.append('socket') 
    pass 
try: 
    import shutil 
except ImportError: 
    errors.append('shutil') 
try: 
    import urllib 
except ImportError: 
    errors.append('urllib') 
    pass 
if len(errors) > 0: 
    print colors.red + '[!] ' + colors.end + 'Error: The Following Module(s) Encountered Error(s): \n' 
    for i in range(len(errors)): 
     print '\t' + errors[i] 
    print colors.blue + '\n[*] ' + colors.end + 'Please Install/Reinstall the Listed Modules' 
    quit() 

この方法はうまく動作するようだが、私はあまり全体的に部屋を取るだろうな方法をしたいと思います。このマルチtry/exceptブロックメソッドを使用する主な理由は、どのモジュールがインポートに問題があるかを検出する必要があることです。

+0

'pip'は、依存関係をインストールするの世話をすることができるように、なぜ、[適切なパッケージング](https://python-packaging-user-guide.readthedocs.org/en/latest/)を使用していませんか?そうすれば、コードの依存関係管理*の責任を引き継ぎ、エラーの処理方法を心配する必要がありません。 –

答えて

0
import importlib 

moduleNames = ['socket', 'shutil', 'urllib'] 

missingModuleNames = [] 

for moduleName in moduleNames: 
    try: 
     importlib.import_module (moduleName) 
    except: 
     missingModuleNames.append (moduleName) 

print (missingModuleNames)