2013-11-02 42 views

回答

5

不同方式退出

os._exit()的:

  • 退出而不调用清理处理程序的过程。

exit(0)

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

exit(1)

  • 有一些问题/错误/问题,这就是为什么在程序退出。

sys.exit()

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

quit()

  • 关闭Python文件。

摘要

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

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

如果您使用的是大文件或正在使用python来控制终端,您将主要使用sys.exit()os._exit()。其他主要使用exit()quit()

+0

为什么这么多的反对票?看起来像很好的信息。 –

+0

我编辑试图清理它。 @PietroSperoni也许这是缺乏代码格式。也许人们觉得措辞有点草率(这是我读过的印象)。 –

44

功能*quit()exit(),并以同样的方式sys.exit()功能:它们提高SystemExit例外。所以没有真正的区别,除了sys.exit()始终可用,但exit()quit()仅在导入site模块时可用。

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

结论

  • 使用exit()或REPL quit()

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

  • 使用os._exit()让子进程在致电os.fork()后退出。

脚注

*其实,quit()exit()是可调用的实例对象,但我认为这没关系给他们打电话的功能。

435

让我给他们一些信息:

  1. quit提高了幕后SystemExit例外。

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

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

    此功能,以帮助人们谁也不知道的Python。毕竟,新手试图退出Python的最可能的事情之一是输入quit

    尽管如此,quit应该不是被用于生产代码。这是因为它仅在加载了site模块时才起作用。相反,这个函数只能用在解释器中。

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

    此外,在打印时也给出了一个消息:

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

    然而,像quitexit被认为是不好的生产代码使用和应保留在解释器使用。这是因为它也依赖于site模块。

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

    不像那两个,但是sys.exit在生产代码中被认为是很好的。这是因为sys模块将一直存在。

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

    请注意,在给出的四种方法中,只有这个方法是独特的。

总结来说,所有四种方法都退出程序。然而,前两种方法在生产代码中被认为是不好的,而最后一种方法是一种非标准,肮脏的方法,只能在特殊情况下使用。因此,如果您想正常退出程序,请使用第三种方法:sys.exit


或者说,在我看来甚至更好,你可以做直接sys.exit做幕后是什么,然后运行:

raise SystemExit 

这样,你不需要导入sys第一。

但是,这种选择只是一种风格,完全取决于你。

+52

我相信这个答案值得一个复选标记。 –

+1

但是在ipython shell中''quit''和'exit'退出shell而'sys.exit'没有。 – Lee

12

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

内部sys.exit只是提高SystemExit。然而,拨打sys.exit比直接拨打SystemExit更具惯用。

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

quitexit仅用于提供Python提示的简单方法。这适用于意外进入Python提示的新用户或用户,并且不想知道正确的语法。他们很可能会尝试打字exitquit。虽然这不会退出解释,它至少发出一条消息,告诉他们一条出路:

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

这实质上就是一种利用解释器打印您输入的任何表达的__repr__事实黑客攻击在提示。

相关问题