中止在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

问题答案:

没有停止模块执行的好方法。您可以引发一个异常,但是导入模块将需要处理它。也许只是这样重构:

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

更新:最好将模块更改为仅定义函数和类,然后让调用者调用其中之一来执行所需的工作。

如果您真的想在导入期间完成所有这些工作(请记住,我认为最好不要这样做),则可以将模块更改为:

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

_my_whole_freaking_module()