12

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

这是我想要实现的示例:

主文件

print('main1')
import testmodule
print('main2')

测试模块.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
4

3 回答 3

9

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

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()
于 2011-07-04T12:29:33.777 回答
5

我的 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
于 2011-07-04T12:38:15.133 回答
2

您可以将模块代码包装在函数中,如下所示:

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

main()
于 2011-07-04T12:31:11.017 回答