Прервать выполнение модуля в Python

Я хотел бы остановить оценку модуля, который импортируется, без остановки всей программы.

вот пример того, чего я хочу достичь:

main.py

print('main1')
import testmodule
print('main2')

testmodule.py

print(' module1')
some_condition=True
if some_condition:
  exit_from_module()  # How to do this?
print(' module2')     # This line is not executed.

ожидаемый результат:

main1
 module1
main2

3 ответов


нет хорошего способа остановить выполнение модуля. Вы можете создать исключение, но тогда ваш модуль импорта должен будет иметь дело с ним. Возможно, просто рефакторинг такой:

print(' module1')
some_condition = True
if not some_condition:
  print(' module2')

Update: еще лучше было бы изменить ваш модуль, чтобы только определить функции и классы, а затем вызвать вызывающий объект для выполнения необходимой им работы.

Если вы действительно хотите сделать всю эту работу во время импорта (помните, я думаю, что было бы лучше не), затем вы можете изменить свой модуль так:

def _my_whole_freaking_module():
    print(' module1')
    some_condition = True
    if some_condition:
        return
    print(' module2')

_my_whole_freaking_module()

мой main.py похоже на это,

print 'main 1'

try:
    import my_module
except ImportError:
    pass

print 'main 2'

и my_module.py похоже на это,

print 'module 1'

if True:
    raise ImportError
else:
    pass

print 'module 2'

выход есть

main 1
module 1
main 2

вы можете обернуть код модуля внутри функции, как это:

def main():
  print(' module1')
  some_condition=True
  if some_condition:
    return
  print(' module2')

main()