2009-02-23 78 views
5

我有一個導入模塊的模塊,但在某些情況下,導入的模塊可能不存在。模塊導入後,有一個類繼承了導入模塊的類。如果我在模塊不存在的情況下捕捉到ImportError異常,我如何阻止Python解析模塊的其餘部分?如果這是不可能的,我願意接受其他解決方案。如何在完成解析之前退出模塊?

這是一個基本的例子(selfaware.py):

try: 
    from skynet import SkyNet 
except ImportError: 
    class SelfAwareSkyNet(): 
     pass 
    exit_module_parsing_here() 

class SelfAwareSkyNet(SkyNet): 
    pass 

的唯一途徑我能想到做到這一點是:

  • 導入selfaware.py模塊之前,檢查skynet模塊是可用的,只需傳遞或創建一個存根類。如果多次導入selfaware.py,這將導致DRY。
  • selfaware.py之內有與try塊一起定義的類。例如: -

    try: 
        from skynet import SkyNet 
        class SelfAwareSkyNet(SkyNet): 
         pass 
    except ImportError: 
        class SelfAwareSkyNet(): 
         pass 
    
+0

有什麼不對您的解決方案?它不起作用嗎?它有錯誤嗎? – 2009-02-23 10:58:30

回答

2

你可以使用:

try: 
    from skynet import SkyNet 
    inherit_from = SkyNet 
except ImportError: 
    inherit_from = object 

class SelfAwareSkyeNet(inherit_from): 
    pass 

這隻有執行沒有什麼不同。

編輯:評論後的新解決方案。

8

嘗試:支持其他的:根據條款

try: 
    from skynet import SkyNet 

except ImportError: 
    class SelfAwareSkyNet(): 
     pass 

else: 
    class SelfAwareSkyNet(SkyNet): 
     pass 
相關問題