2009-02-23 43 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 
相关问题