2016-02-26 76 views
0

我需要幫助,以獲得不導入模塊的名稱,而這樣做獲取已導入失敗

這樣的代碼是當前模塊的名稱:

#!/usr/bin/env python 
bla=[] 
try: 
    import os 
    import sys 
    import somethings 
    import blabla 
except: 
    bla.append(NOT_IMPORTED_MODULE_NAME) # it should be here 
if len(bla)>0: 
    exit("not imported:%s" % " ".join(bla)) 

謝謝你提前

+0

您的代碼將在第一次失敗的導入時停止。你的堆棧跟蹤會告訴你哪個模塊會失敗。如果你真的想,你可以解析出字符串來獲取模塊名稱。但是,這可能是一個更好的方法爲你:http://stackoverflow.com/questions/14050281/how-to-check-if-a-python-module-exists-without-importing-it – idjaw

+0

@idjaw所以有沒有辦法做到這一點? – script0r

+0

我還沒有找到一個理由來做到這一點,所以我從來沒有真正分析過這一點。我發佈的鏈接看起來像我想做的事情。請記住,如果引發異常,您的代碼將停止運行,因此現在編寫代碼的方式會失敗,並且不會報告blabla。 – idjaw

回答

2

儘管我要說的更適合作爲評論,但我只是在這裏打字,因爲我因爲低信譽度而不被允許評論。 (因爲我在這裏很新)

假設你有sys和blabla模塊丟失。使用當前設置,它會在嘗試加載sys時引發異常。它甚至不會達到import blabla。所以你不知道如果模塊丟失或者沒有以前的模塊丟失。如果你真的想要你想要的功能,你可以將所有模塊導入的每一個import module都包含在異常處理中。但在我看來,這已經結束了。正如idjaw提到的,如果有任何模塊丟失,您應該能夠從堆棧跟蹤中看到。

0
#!/usr/bin/env python 
import sys 
import os 
from importlib import import_module 

bla = [] 

for modulename in ('something', 'blabla'): 
    try: 
     import_module(modulename) 
    except ImportError as exc: 
     bla.append(str(exc)) 


if bla: 
    sys.stderr.write('\n'.join(bla)) 
    sys.stderr.write('\n') 
    sys.exit(1)