Python退出命令-为什么这么多,什么时候应该使用每一个?

python似乎支持许多不同的命令来停止脚本执行。我找到的选项是:quit()exit()sys.exit()os._exit()

我错过了什么吗? 它们之间有什么区别?什么时候使用它们?< / p >
818603 次浏览

不同的退出方式

# EYZ0:

  • 退出流程,不调用清理处理程序。

# EYZ0:

  • 一个干净的退出,没有任何错误/问题。

# EYZ0:

  • 有一些问题/错误/问题,这就是程序退出的原因。

# EYZ0:

  • 当系统和python关闭时;这意味着在程序运行后使用的内存更少。

# EYZ0:

  • 关闭python文件。

总结

基本上它们都做同样的事情,然而,这也取决于你做它的目的。

我不认为你遗漏了任何东西,我建议你习惯quit()exit()

如果您使用大文件或使用python来控制终端,则主要使用sys.exit()os._exit()

否则主要使用exit()quit()

函数 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()exit()是可调用的实例对象,但我认为将它们称为函数是可以的。

我来介绍一下:

  1. quit()只是引发SystemExit异常。

    此外,如果你打印它,它会给出一个消息:

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

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

    然而,quit应该在产品代码中使用。这是因为它只在加载site模块时才有效。相反,这个函数应该只在解释器中使用

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

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

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

    然而,像quit一样,exit被认为不适合在生产代码中使用,应该保留在解释器中使用。这是因为它也依赖于site模块

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

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

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

    注意,在给出的四个方法中,只有这个方法是唯一的

总之,所有四个方法都退出程序。但是,前两种方法被认为不适合在生产代码中使用,而最后一种方法是非标准的、肮脏的方法,只在特殊场景中使用。因此,如果您想正常退出程序,请使用第三种方法:sys.exit


或者,在我看来更好的是,你可以直接做sys.exit在幕后所做的事情并运行:

raise SystemExit

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

然而,这种选择只是一种风格,完全取决于你自己。

sys.exit是规范的退出方式。

在内部sys.exit只会引发SystemExit。然而,调用# eyz0比直接抛出SystemExit更习惯。

os.exit是一个低级的系统调用,它直接退出,不调用任何清理处理程序。

quitexit的存在只是为了提供一个简单的方法来退出Python提示符。这适用于新用户或不小心输入了Python提示符,并且不想知道正确语法的用户。他们可能会尝试输入exitquit。虽然这不会退出解释器,但它至少会发出一条消息,告诉解释器出路:

>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$

这本质上只是利用解释器打印您在提示符下输入的任何表达式的__repr__这一事实的一种hack。