关于python exit命令:python exit命令-为什么要使用这么多命令,以及何时应该使用每个命令?

Python exit commands - why so many and when should each be used?

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模块时工作。相反,这个函数应该只在解释器中使用。

  • exitquit的别名(反之亦然)。它们一起存在只是为了让Python更加用户友好。

    此外,打印时也会显示一条信息:

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

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

  • sys.exit在后台引发SystemExit异常。这意味着在这方面与quitexit相同。

    然而,与这两个不同的是,sys.exit被认为是生产代码中很好的使用方法。这是因为sys模块将始终存在。

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

    注意,在给出的四种方法中,只有这一种方法在其功能上是唯一的。

  • 综上所述,这四种方法都退出了程序。但是,前两种方法被认为是不适合在生产代码中使用的,最后一种方法是一种非标准的、肮脏的方法,只在特殊情况下使用。因此,如果您希望正常退出程序,请使用第三种方法:sys.exit

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

    1
    raise SystemExit

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

    然而,这个选择只是风格上的一个选择,完全取决于您自己。


    函数*quit()exit()sys.exit()的功能相同:它们引发SystemExit异常。因此没有实际的区别,除了sys.exit()始终可用,但是exit()quit()仅在site模块导入时可用。

    os._exit()函数是特殊的,它立即退出,而不调用任何清理函数(例如,它不刷新缓冲区)。这是为高度专业化的用例设计的…基本上,只有在孩子接到os.fork()电话后。

    结论

    • 在回复中使用exit()quit()

    • 在脚本中使用sys.exit(),如果愿意,也可以使用raise SystemExit()

    • 调用os.fork()后,使用os._exit()退出子进程。

    所有这些都可以在没有参数的情况下调用,或者您可以指定退出状态,例如,exit(1)raise SystemExit(1)以退出状态1。请注意,可移植程序的退出状态代码限制在0-255范围内,如果您在许多系统上使用raise SystemExit(256),这将被截断,您的进程将以0状态退出。

    脚注

    *实际上,quit()exit()是可调用的实例对象,但我认为可以调用它们的函数。


    sys.exit是典型的退出方式。

    在国内,sys.exit只是提高了SystemExit。但是,调用sys.exit比直接提升SystemExit更为惯用。

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

    quitexit的存在只是为了提供一种摆脱python提示的简单方法。这是针对意外进入python提示,不想知道正确语法的新用户或用户。他们可能会尝试输入exitquit。虽然这不会退出解释器,但它至少会发出一条消息,告诉他们一条出路:

    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()

    • 关闭python文件。

    总结

    基本上,他们都做同样的事情,但是,这也取决于你在做什么。

    我不认为你漏掉了什么,我建议你习惯于quit()exit()

    主要是在使用大文件或使用python控制终端时,使用sys.exit()os._exit()

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