6

モジュールをインポートするモジュールがありますが、インポートされるモジュールが存在しない場合があります。モジュールがインポートされた後、インポートされたモジュールのクラスを継承するクラスがあります。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
    
4

2 に答える 2

7

try:else:句をサポートします

try:
    from skynet import SkyNet

except ImportError:
    class SelfAwareSkyNet():
        pass

else:
    class SelfAwareSkyNet(SkyNet):
        pass
于 2009-02-23T10:51:16.597 に答える
2

あなたが使用することができます:

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

class SelfAwareSkyeNet(inherit_from):
    pass

これは、実装に違いがない場合にのみ機能します。

編集:コメント後の新しい解決策。

于 2009-02-23T10:34:43.297 に答える