在Python中中止模块执行

16 投票
3 回答
9542 浏览
提问于 2025-04-16 20:47

我想在导入一个模块的时候,停止这个模块的执行,但不想让整个程序停止。

下面是我想实现的一个例子:

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()

撰写回答