Выйдите из кода модуля на полпути через импорт, но обработайте импорт как успешный - PullRequest
0 голосов
/ 03 мая 2018

У меня есть модуль (который я написал и могу свободно редактировать), который я импортирую, и я хочу иметь возможность остановить его выполнение на полпути, пока его импорт рассматривается как успешный. К сожалению, если я произнесу исключение во время импорта, модуль не будет успешно импортирован и недоступен. Можно ли прервать выполнение (например, не заключая последующий код в блок if ...:), просто вызвав что-то похожее на sys.exit()? sys.exit() не работает, потому что вызывает SystemExit, что приводит к сбою импорта.

1 Ответ

0 голосов
/ 03 мая 2018

В отличие от других языков, return не допускается на уровне модуля (т. Е. Вне функции).

Как вы выяснили, создание исключения не является хорошим решением.

Альтернативные решения включают в себя:

  • заверните оставшийся код в if.

  • оберните основной код в функцию и используйте return, чтобы прервать его в какой-то момент.

  • оберните основной код в for:

for _ in [0]:
    always_executed()

    if some_condition: break

    sometimes_executed()

    break

не самая лучшая читаемость (из-за for, которая несколько вводит в заблуждение).

Я бы предпочел main() функцию или if:.

...