Python退出命令 – 为什么这么多,什么时候应该使用?
看来python支持许多不同的命令来停止脚本执行。
我find的select是: quit()
, exit()
, sys.exit()
, os._exit()
我错过了吗? 他们之间有什么区别? 你什么时候使用每个?
让我给他们一些资料:
-
quit
在后台引发SystemExit
exception。而且,如果你打印它,它会给出一个消息:
>>> print (quit) Use quit() or Ctrl-Z plus Return to exit >>>
包含这个function是为了帮助那些不了解Python的人。 毕竟,新手试图退出Python的最可能的事情之一是input
quit
。尽pipe如此,
quit
不应该用于生产代码。 这是因为它仅在加载site
模块时才起作用。 相反,这个函数只能用在解释器中。 -
exit
是exit
的别名(反之亦然)。 它们一起存在只是为了使Python更加用户友好。而且,打印时也会显示一条消息:
>>> print (exit) Use exit() or Ctrl-Z plus Return to exit >>>
但是,像
quit
一样,exit
在生产代码中被认为是不好的,应该留给翻译使用。 这是因为它也依赖于site
模块。 -
sys.exit
在后台引发SystemExit
exception。 这就意味着它在这方面与quit
和exit
是一样的。不像那两个,
sys.exit
在生产代码中被认为是很好用的。 这是因为sys
模块将一直在那里。 -
os._exit
退出程序而不调用清理处理程序,刷新stdio缓冲区等 。 因此,这不是一个标准的退出方式,只能在特殊情况下使用。 其中最常见的是由os.fork
创build的subprocess。请注意,在给出的四种方法中,只有这个方法是独一无二的。
总而言之,所有四种方法都退出程序。 但前两种方法在生产代码中被认为是不好的,最后一种是非标准的,只能在特殊情况下使用的肮脏方法。 所以,如果你想正常退出一个程序,用第三种方法: sys.exit
。
或者,在我看来,甚至更好,你可以直接做sys.exit
在幕后执行:
raise SystemExit
这样,你不需要先导入sys
。
然而,这种select只是一种风格,纯粹取决于你自己。
函数* quit()
, exit()
和sys.exit()
函数的方式相同:它们引发SystemExit
exception。 所以除了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
是一个低层的系统调用,直接退出调用任何清理处理程序。
quit
和exit
只是为了提供Python提示符的简单方法。 这是针对意外进入Python提示符的新用户或用户,并且不想知道正确的语法。 他们很可能会尝试inputexit
或quit
。 虽然这不会退出解释器,但它至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()