python似乎支持很多不同的命令来停止脚本的执行,我找到的选择是:quit()、exit()、sys.exit()、os._exit()。
我错过了吗?他们之间有什么区别?你们什么时候用?
让我提供一些关于它们的信息:
quit在幕后提出了SystemExit例外。
此外,如果您打印它,它将给出一条消息:
1 2 3
| >>> print (quit)
Use quit() or Ctrl-Z plus Return to exit
>>> |
此功能用于帮助不了解Python的人。毕竟,新手最有可能退出python的事情之一就是输入quit。
然而,在生产代码中不应该使用quit。这是因为它只在加载了site模块时工作。相反,这个函数应该只在解释器中使用。
exit是quit的别名(反之亦然)。它们一起存在只是为了让Python更加用户友好。
此外,打印时也会显示一条信息:
1 2 3
| >>> 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在幕后所做的,然后运行:
这样,您就不需要先导入sys。
然而,这个选择只是风格上的一个选择,完全取决于您自己。
- 但在伊普西顿壳中,quit和exit退出了壳,而sys.exit没有退出。
- sys.exit()不是可靠的关闭方式。如果在线程内部调用它,那么它将只终止该线程,除非它在主线程中。这会导致很多情况下程序继续运行,因为调用不在主线程中,特别是当一些解释程序将无形地线程调用时。
- 我投票赞成增加一个end命令,这将是raise SystemExit命令。不明白为什么不可能有这样简单的东西,比如基本的。
- @Brianburns:不值得添加专用语法和保留另一个关键字。这类似于为什么print从一个语句更改为一个函数。添加语法很容易,但这样做会带来复杂的成本。
- 调用sys.exit()时括号是否重要?
- 即使在某些受限的python环境中没有sys库,raise SystemExit也非常棒。
函数*quit()、exit()和sys.exit()的功能相同:它们引发SystemExit异常。因此没有实际的区别,除了sys.exit()始终可用,但是exit()和quit()仅在site模块导入时可用。
os._exit()函数是特殊的,它立即退出,而不调用任何清理函数(例如,它不刷新缓冲区)。这是为高度专业化的用例设计的…基本上,只有在孩子接到os.fork()电话后。
结论
所有这些都可以在没有参数的情况下调用,或者您可以指定退出状态,例如,exit(1)或raise SystemExit(1)以退出状态1。请注意,可移植程序的退出状态代码限制在0-255范围内,如果您在许多系统上使用raise SystemExit(256),这将被截断,您的进程将以0状态退出。
脚注
*实际上,quit()和exit()是可调用的实例对象,但我认为可以调用它们的函数。
sys.exit是典型的退出方式。
在国内,sys.exit只是提高了SystemExit。但是,调用sys.exit比直接提升SystemExit更为惯用。
os.exit是一个低级系统调用,直接退出,不调用任何清理处理程序。
quit和exit的存在只是为了提供一种摆脱python提示的简单方法。这是针对意外进入python提示,不想知道正确语法的新用户或用户。他们可能会尝试输入exit或quit。虽然这不会退出解释器,但它至少会发出一条消息,告诉他们一条出路:
1 2 3 4
| >>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$ |
这基本上只是一个利用解释器打印您在提示下输入的任何表达式的__repr__这一事实的黑客。
不同的退出方式
os._exit():
exit(0):
exit(1):
sys.exit():
- 当系统和python关闭时,这意味着在程序运行后使用的内存更少。
quit():
总结
基本上,他们都做同样的事情,但是,这也取决于你在做什么。
我不认为你漏掉了什么,我建议你习惯于quit()或exit()。
主要是在使用大文件或使用python控制终端时,使用sys.exit()和os._exit()。
否则主要使用exit()或quit()。
- 为什么会有这么多反对票?看起来信息不错。
- 我编辑了试着清理它。@Pietrosperoni可能是因为缺乏代码格式。也可能是人们觉得措辞有点草率(这是我读到的印象)。