似乎 python 支持许多不同的命令来停止脚本执行。
我发现的选择是: quit()
, exit()
sys.exit()
os._exit()
我错过了什么吗?它们之间有什么区别?你什么时候使用它们?
原文由 Jonathan Livni 发布,翻译遵循 CC BY-SA 4.0 许可协议
似乎 python 支持许多不同的命令来停止脚本执行。
我发现的选择是: quit()
, exit()
sys.exit()
os._exit()
我错过了什么吗?它们之间有什么区别?你什么时候使用它们?
原文由 Jonathan Livni 发布,翻译遵循 CC BY-SA 4.0 许可协议
让我提供一些关于它们的信息:
quit()
简单地引发 SystemExit
异常。此外,如果您打印它,它会给出一条消息:
>>> print (quit)
Use quit() or Ctrl-Z plus Return to exit
>>>
包含此功能是为了帮助不了解 Python 的人。毕竟,新手最有可能尝试退出 Python 的事情之一就是输入 quit
。
尽管如此, 不应 在生产代码中使用 quit
。这是因为它只有在加载了 site
模块时才有效。相反,这个函数应该只在解释器中使用。
exit()
是 quit
的别名(反之亦然)。它们一起存在只是为了使 Python 更加用户友好。此外,它在打印时也会给出一条消息:
>>> print (exit)
Use exit() or Ctrl-Z plus Return to exit
>>>
但是,像 quit
, exit
被认为不适合在生产代码中使用,应该保留在解释器中使用。这是因为它太依赖于 site
模块。
sys.exit()
还会引发 SystemExit
异常。这意味着它在这方面与 quit
和 exit
相同。然而,与这两个不同的是, sys.exit
被认为适合用于生产代码。这是因为 sys
模块将始终存在。
os._exit()
退出程序 而不调用清理处理程序、刷新 stdio 缓冲区等。因此,它不是标准的退出方式,只能在特殊情况下使用。其中最常见的是在 os.fork
创建的子进程中。请注意,在给出的四种方法中,只有这一种方法的作用是独一无二的。
综上所述,四种方法都退出了程序。但是,前两种被认为不适合在生产代码中使用,而最后一种是非标准的、肮脏的方式,仅在特殊情况下使用。因此,如果您想正常退出程序,请使用第三种方法: sys.exit
。
或者,在我看来更好的是,您可以直接执行 sys.exit
在幕后执行的操作并运行:
raise SystemExit
这样,您不需要首先导入 sys
。
然而,这种选择只是风格上的选择,完全取决于您。
原文由 user2555451 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
The functions *
quit()
,exit()
, andsys.exit()
function in the same way: they raise theSystemExit
exception. So there is no real difference, except thatsys.exit()
is always available butexit()
andquit()
are only available if thesite
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()
是可调用的实例对象,但我认为调用它们函数是可以的。