我想停止评估正在导入的模块,而不停止整个程序。
以下是我想要实现的一个例子:
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
答案 0 :(得分:7)
没有好办法停止执行模块。您可以引发异常,但随后您的导入模块将需要处理它。也许只是像这样重构:
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()
答案 1 :(得分:3)
我的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
答案 2 :(得分:2)
您可以将模块代码包装在函数中,如下所示:
def main():
print(' module1')
some_condition=True
if some_condition:
return
print(' module2')
main()