如何在完成解析之前退出模块?

gak*_*gak 6 python import module

我有一个导入模块的模块,但在某些情况下,导入的模块可能不存在.导入模块后,有一个类继承了导入模块的类.如果我ImportError在模块不存在的情况下捕获异常,我怎样才能阻止Python解析模块的其余部分?如果那是不可能的话,我愿意接受其他解决方案.

这是一个基本的例子(selfaware.py):

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

class SelfAwareSkyNet(SkyNet):
    pass
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法是:

  • 在导入selfaware.py模块之前,请检查skynet模块是否可用,并简单地传递或创建存根类.如果selfaware.py多次导入,这将导致DRY .
  • 在内部selfaware.py使用try块定义类.例如:

    try:
        from skynet import SkyNet
        class SelfAwareSkyNet(SkyNet):
            pass
    except ImportError:
        class SelfAwareSkyNet():
            pass
    
    Run Code Online (Sandbox Code Playgroud)

And*_*lke 7

try:支持else:子句

try:
    from skynet import SkyNet

except ImportError:
    class SelfAwareSkyNet():
        pass

else:
    class SelfAwareSkyNet(SkyNet):
        pass
Run Code Online (Sandbox Code Playgroud)


hyp*_*ean 2

你可以使用:

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

class SelfAwareSkyeNet(inherit_from):
    pass
Run Code Online (Sandbox Code Playgroud)

仅当实现没有差异时这才有效。

编辑:评论后的新解决方案。