在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 个回答
2
你可以把模块的代码放在一个函数里面,像这样:
def main():
print(' module1')
some_condition=True
if some_condition:
return
print(' module2')
main()
6
我的 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
10
没有好的方法可以停止一个模块的执行。你可以抛出一个异常,但这样的话,导入这个模块的地方就得处理这个异常。也许你可以考虑这样重构代码:
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()