2014-12-28 73 views
2

我在我的項目中使用自定義日誌記錄模塊。如果它不可用,我想用虛擬替代它而不是提高ImportErrorPythonic方式來處理導入錯誤

這裏是目前做的代碼:

try: 
    import logger 
except ImportError: 
    print 'Couldn\'t load logger' 

    class DummyLogger(object): 
     def __init__(self): 
      pass 
     def log(self, image): 
      pass 

    logger = DummyLogger() 

我不認爲這是一個完美的解決方案。它工作,當然,但它不好。有沒有更好的辦法?

+0

爲什麼它不可用? –

+0

@ArashSaidi,我的程序是一個圖像處理管道。它會拍攝一張照片,做一些事情並保存結果。另外,我有一個腳本來訓練我在內部使用的分類器。該腳本需要在將原始數據送入分類器之前對原始數據進行一些預處理。預處理例程位於我正在討論的模塊中。該模塊位於主項目的子目錄中,所以當我運行主程序時,一切正常。當我運行培訓時,模塊沒有看到文件系統中上一級的記錄器。 – Pastafarianist

回答

0

可以使它更簡潔相當容易:

try: 
    import logger 
except ImportError: 
    print 'Couldn\'t load logger' 

    class logger(object): 
     @classmethod 
     def log(cls, image): 
      pass 

請注意,即使在您當前的版本中,em應該刪除pty __init__ - 它不會增加任何值。

+0

謝謝,這正是我一直在尋找的。你也可以用'@ staticmethod'替換'@ classmethod'來擺脫'cls'參數。 – Pastafarianist

6

我會把虛擬實現成一個單獨的模塊,稱之爲dummy_loggger,並寫:

try: 
    import logger 
except ImportError: 
    import dummy_logger as logger 

我和JSON解析器做到了這一點,在過去:

try: 
    import ujson as json # very fast but might not be available in some cases 
except ImportError: 
    import json 
+0

在比我更有組織的環境中,這將是一個完美的解決方案。不幸的是,這仍然需要外部依賴,所以這不是100%防彈。我贊成你的答案,但接受@ AlexMartelli's。 – Pastafarianist

相關問題