Прервать выполнение модуля в 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()