Как выйти из модуля до его окончания? - PullRequest
6 голосов
/ 23 февраля 2009

У меня есть модуль, который импортирует модуль, но в некоторых случаях импортируемый модуль может не существовать. После того, как модуль импортирован, класс наследует от импортируемого модуля. Если бы я должен был поймать исключение 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 импортирован несколько раз.
  • Внутри selfaware.py есть класс, определенный в блоке try. e.g.:

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

Ответы [ 2 ]

8 голосов
/ 23 февраля 2009

try: поддерживает else: предложение

try:
    from skynet import SkyNet

except ImportError:
    class SelfAwareSkyNet():
        pass

else:
    class SelfAwareSkyNet(SkyNet):
        pass
2 голосов
/ 23 февраля 2009

Вы можете использовать:

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

class SelfAwareSkyeNet(inherit_from):
    pass

Это работает, только если реализация не отличается.

Редактировать: Новое решение после комментария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...