似乎 python 支持许多不同的命令来停止脚本执行。
我发现的选择是: quit()
, exit()
, sys.exit()
,os._exit()
我错过了吗?他们之间有什么区别?你什么时候使用每个?
似乎 python 支持许多不同的命令来停止脚本执行。
我发现的选择是: quit()
, exit()
, sys.exit()
,os._exit()
我错过了吗?他们之间有什么区别?你什么时候使用每个?
让我提供一些关于它们的信息:
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
但是,likeexit
被认为不适合在生产代码中使用,应该保留在解释器中使用。这是因为它也依赖于site
模块。
sys.exit()
也引发了SystemExit
异常。这意味着它quit
与exit
在这方面相同。
然而,与这两个不同的是,sys.exit
它被认为可以很好地用于生产代码。这是因为sys
模块将永远存在。
os._exit()
退出程序而不调用清理处理程序、刷新 stdio 缓冲区等。因此,它不是标准的退出方式,只能在特殊情况下使用。其中最常见的是由os.fork
.
请注意,在给出的四种方法中,只有这一种是独一无二的。
总结起来,所有四种方法都退出了程序。但是,前两种被认为不适合在生产代码中使用,最后一种是非标准的、肮脏的方式,仅用于特殊场景。所以,如果你想正常退出程序,请使用第三种方法:sys.exit
.
或者,我认为更好的是,您可以直接sys.exit
执行幕后操作并运行:
raise SystemExit
这样,您不需要先导入sys
。
但是,这种选择只是一种风格,完全取决于您。
函数* quit()
、exit()
和sys.exit()
以相同的方式起作用:它们引发SystemExit
异常。所以没有真正的区别,除了sys.exit()
总是可用的,但exit()
只有quit()
在site
模块被导入时才可用。
该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()
andexit()
是可调用的实例对象,但我认为将它们称为函数是可以的。
os._exit()
:
exit(0)
:
exit(1)
:
sys.exit()
:
quit()
:
基本上他们都做同样的事情,但是,这也取决于你在做什么。
我认为您没有遗漏任何内容,我建议您习惯quit()
or exit()
。
如果您使用大文件或使用 python 来控制终端,您将使用sys.exit()
并且主要是。os._exit()
否则主要使用exit()
or quit()
。
sys.exit
是退出的规范方式。
内部sys.exit
只是加注SystemExit
。然而,跟注比直接sys.exit
加注更惯用。SystemExit
os.exit
是一个低级系统调用,直接退出而不调用任何清理处理程序。
quit
并且exit
存在只是为了提供一种摆脱 Python 提示的简单方法。这适用于新用户或意外进入 Python 提示符并且不想知道正确语法的用户。他们可能会尝试键入exit
或quit
. 虽然这不会退出解释器,但它至少会发出一条消息,告诉他们一条出路:
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$
这本质上只是一个 hack,它利用解释器打印__repr__
您在提示符下输入的任何表达式的事实。