Python退出命令 – 为什么这么多,什么时候应该使用?

看来python支持许多不同的命令来停止脚本执行。
我find的select是: quit()exit()sys.exit()os._exit()

我错过了吗? 他们之间有什么区别? 你什么时候使用每个?

让我给他们一些资料:

  1. quit在后台引发SystemExitexception。

    而且,如果你打印它,它会给出一个消息:

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

    包含这个function是为了帮助那些不了解Python的人。 毕竟,新手试图退出Python的最可能的事情之一是inputquit

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

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

    而且,打印时也会显示一条消息:

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

    但是,像quit一样, exit在生产代码中被认为是不好的,应该留给翻译使用。 这是因为它也依赖于site模块。

  3. sys.exit在后台引发SystemExitexception。 这就意味着它在这方面与quitexit是一样的。

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

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

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

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


或者,在我看来,甚至更好,你可以直接做sys.exit在幕后执行:

 raise SystemExit 

这样,你不需要先导入sys

然而,这种select只是一种风格,纯粹取决于你自己。

函数* quit()exit()sys.exit()函数的方式相同:它们引发SystemExitexception。 所以除了sys.exit()始终可用, exit()quit()只有在导入了site模块的情况下才有效。

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

结论

  • 在REPL中使用exit()quit()

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

  • 调用os.fork()之后,使用os._exit()为subprocess退出。

脚注

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

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

内部sys.exit只是引发SystemExit 。 但是,调用sys.exit比直接调用SystemExit更具有惯性。

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

quitexit只是为了提供Python提示符的简单方法。 这是针对意外进入Python提示符的新用户或用户,并且不想知道正确的语法。 他们很可能会尝试inputexitquit 。 虽然这不会退出解释器,但它至less会发出一条消息,告诉他们一条出路:

 >>> exit Use exit() or Ctrl-D (ie EOF) to exit >>> exit() $ 

这本质上只是一个破解,它利用解释器打印在提示符处input的任何expression式的__repr__

os._exit()退出进程而不调用清理处理程序。

退出(0)意味着一个干净的出口没有任何错误/问题

退出(1)意味着有一些问题/错误/问题,这就是为什么该程序正在退出。

sys.exit()是当系统和pythonclosures意味着更less的内存正在使用程序运行后。

quit()closurespython文件

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

我不认为你错过了任何东西,我会build议习惯于退出()或退出()。

你主要使用sys.exit()和os._exit(),如果你使用的是大文件或者使用python来控制terminal。

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