Python 退出命令 - 为什么这么多以及什么时候应该使用它们?

新手上路,请多包涵

似乎 python 支持许多不同的命令来停止脚本执行。

我发现的选择是: quit()exit() sys.exit() os._exit()

我错过了什么吗?它们之间有什么区别?你什么时候使用它们?

原文由 Jonathan Livni 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 304
2 个回答

The functions * quit() , exit() , and sys.exit() function in the same way: they raise the SystemExit exception. So there is no real difference, except that sys.exit() is always available but exit() and quit() are only available if the site module is imported ( 文档)。

os._exit() 函数很特殊,它会立即退出而不调用任何清理函数(例如,它不会刷新缓冲区)。这是为高度专业化的用例设计的……基本上,仅在 os.fork() 调用之后的孩子中。

结论

  • 在 REPL 中使用 exit()quit()

  • 使用 sys.exit() 在脚本中,或者 raise SystemExit() 如果你愿意。

  • 使用 os._exit() 让子进程在调用 os.fork() 后退出。

所有这些都可以在没有参数的情况下调用,或者您可以指定退出状态,例如 exit(1)raise SystemExit(1) 以状态 1 退出。请注意,可移植程序仅限于退出状态代码在 0-255 范围内,如果你 raise SystemExit(256) 在许多系统上这将被截断并且你的进程实际上将以状态 0 退出。

脚注

*实际上, quit()exit() 是可调用的实例对象,但我认为调用它们函数是可以的。

原文由 Dietrich Epp 发布,翻译遵循 CC BY-SA 4.0 许可协议

让我提供一些关于它们的信息:

  1. quit() 简单地引发 SystemExit 异常。

此外,如果您打印它,它会给出一条消息:

    >>> print (quit)
   Use quit() or Ctrl-Z plus Return to exit
   >>>

包含此功能是为了帮助不了解 Python 的人。毕竟,新手最有可能尝试退出 Python 的事情之一就是输入 quit

尽管如此, 不应 在生产代码中使用 quit 。这是因为它只有在加载了 site 模块时才有效。相反,这个函数应该只在解释器中使用。

  1. exit()quit 的别名(反之亦然)。它们一起存在只是为了使 Python 更加用户友好。

此外,它在打印时也会给出一条消息:

    >>> print (exit)
   Use exit() or Ctrl-Z plus Return to exit
   >>>

但是,像 quitexit 被认为不适合在生产代码中使用,应该保留在解释器中使用。这是因为它太依赖于 site 模块。

  1. sys.exit() 还会引发 SystemExit 异常。这意味着它在这方面与 quitexit 相同。

然而,与这两个不同的是, sys.exit 被认为适合用于生产代码。这是因为 sys 模块将始终存在。

  1. os._exit() 退出程序 而不调用清理处理程序、刷新 stdio 缓冲区等。因此,它不是标准的退出方式,只能在特殊情况下使用。其中最常见的是在 os.fork 创建的子进程中。

请注意,在给出的四种方法中,只有这一种方法的作用是独一无二的。

综上所述,四种方法都退出了程序。但是,前两种被认为不适合在生产代码中使用,而最后一种是非标准的、肮脏的方式,仅在特殊情况下使用。因此,如果您想正常退出程序,请使用第三种方法: sys.exit


或者,在我看来更好的是,您可以直接执行 sys.exit 在幕后执行的操作并运行:

 raise SystemExit

这样,您不需要首先导入 sys

然而,这种选择只是风格上的选择,完全取决于您。

原文由 user2555451 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题