中止 Python 中模块的执行

发布于 2024-11-18 03:51:20 字数 393 浏览 2 评论 0原文

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

这是我想要实现的目标的示例:

main.py

print('main1')
导入测试模块
打印('main2')

testmodule.py

print('模块1')
一些_条件=真
如果某些_条件:
  exit_from_module() # 如何做到这一点?
print(' module2') # 该行不执行。

预期输出:

<前><代码>main1 模块1 主2

I'd like to stop evaluation of a module that is being imported, without stopping the whole program.

Here's an example of what I want to achieve:

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.

Expected output:

main1
 module1
main2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

尛丟丟 2024-11-25 03:51:20

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

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

There is no good way to stop execution of a module. You can raise an exception, but then your importing module will need to deal with it. Perhaps just refactor like this:

print(' module1')
some_condition = True
if not some_condition:
  print(' module2')

Update: Even better would be to change your module to only define functions and classes, and then have the caller invoke one of those to perform the work they need done.

If you really want to do all this work during import (remember, I think it would be better not to), then you could change your module to be like this:

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

_my_whole_freaking_module()
一人独醉 2024-11-25 03:51:20

我的 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

My main.py looks like this,

print 'main 1'

try:
    import my_module
except ImportError:
    pass

print 'main 2'

and my_module.py looks like this,

print 'module 1'

if True:
    raise ImportError
else:
    pass

print 'module 2'

output is,

main 1
module 1
main 2
呆萌少年 2024-11-25 03:51:20

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

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

main()

You can wrap the module code inside function, like this:

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

main()
我很OK 2024-11-25 03:51:20

使用 while 和 break 的简单解决方案。
也可以使用 for 循环或 try 块来实现。

while true:
   ...
   if condition1: break
   ...
   if condition2: break
   ...
   break

#end of file

别忘了最后一次休息!

Simple solution using while and break.
Also can be implemented using for loop or try block.

while true:
   ...
   if condition1: break
   ...
   if condition2: break
   ...
   break

#end of file

Dont forget the last break! ????

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文