在Python中中止执行模块

Ole*_*pin 8 python python-module python-3.x

我想停止评估正在导入的模块,而不停止整个程序.

这是我想要实现的一个例子:

main.py

print('main1')
import testmodule
print('main2')
Run Code Online (Sandbox Code Playgroud)

testmodule.py

print(' module1')
some_condition=True
if some_condition:
  exit_from_module()  # How to do this?
print(' module2')     # This line is not executed.
Run Code Online (Sandbox Code Playgroud)

预期产量:

main1
 module1
main2
Run Code Online (Sandbox Code Playgroud)

Ned*_*der 7

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

print(' module1')
some_condition = True
if not some_condition:
  print(' module2')
Run Code Online (Sandbox Code Playgroud)

更新:更好的方法是将模块更改为仅定义函数和类,然后让调用者调用其中一个来执行他们需要完成的工作.

如果你真的想在导入过程中完成所有这些工作(记住,我认为最好不要),那么你可以将模块更改为:

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

_my_whole_freaking_module()
Run Code Online (Sandbox Code Playgroud)

  • 重构您的代码.你确定你甚至想要做的不仅仅是定义函数和类吗?导入模块并使其在导入期间执行复杂的操作有点奇怪.看我的编辑. (3认同)

laf*_*ras 5

我的 main.py 看起来像这样,

print 'main 1'

try:
    import my_module
except ImportError:
    pass

print 'main 2'
Run Code Online (Sandbox Code Playgroud)

而 my_module.py 看起来像这样,

print 'module 1'

if True:
    raise ImportError
else:
    pass

print 'module 2'
Run Code Online (Sandbox Code Playgroud)

输出是,

main 1
module 1
main 2
Run Code Online (Sandbox Code Playgroud)