似乎 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__您在提示符下输入的任何表达式的事实。