2016-04-18 92 views
2

在處理更大的項目時,我非常熱衷於錯誤檢測和處理。我正在使用用戶可能已安裝或未安裝的一些模塊,因此我需要考慮這種可能性。動態檢測丟失的模塊(Python)

我想知道一種方法來檢測嘗試導入它們時丟失哪些模塊。目前,我有一組try/except塊監視ImportErrors並將錯誤生成模塊的名稱附加到列表中。

目前代碼:

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

爲什麼不使用[妥善包裝(https://python-packaging-user-guide.readthedocs.org/en/latest/),使'pip'可以照顧安裝的依賴關係?通過這種方式,您可以將代碼的依賴管理責任移出您的代碼,而不必擔心如何處理錯誤。 –

回答

0
import importlib 

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

missingModuleNames = [] 

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

print (missingModuleNames)