python似乎支持许多不同的命令来停止脚本执行。我找到的选项是:quit(), exit(), sys.exit(), os._exit()
quit()
exit()
sys.exit()
os._exit()
# EYZ0:
基本上它们都做同样的事情,然而,这也取决于你做它的目的。
我不认为你遗漏了任何东西,我建议你习惯quit()或exit()。
如果您使用大文件或使用python来控制终端,则主要使用sys.exit()和os._exit()。
否则主要使用exit()或quit()。
函数* quit(), exit()和sys.exit()的作用相同:它们引发SystemExit异常。因此没有真正的区别,除了sys.exit()总是可用,而exit()和quit()仅在导入site模块(文档)时可用。
SystemExit
site
os._exit()函数是特殊的,它立即退出,而不调用任何清理函数(例如,它不刷新缓冲区)。这是为高度专业化的用例设计的……基本上,只在os.fork()调用后的子对象中。
os.fork()
raise SystemExit()
使用os._exit()使子进程在调用os.fork()后退出。
所有这些都可以不带参数调用,或者您可以指定退出状态,例如,exit(1)或raise SystemExit(1)以状态1退出。请注意,可移植程序的退出状态码范围是0-255,如果在许多系统上使用raise SystemExit(256),那么该状态码将被截断,您的进程实际上将以状态0退出。
exit(1)
raise SystemExit(1)
raise SystemExit(256)
实际上,quit()和exit()是可调用的实例对象,但我认为将它们称为函数是可以的。
我来介绍一下:
quit()只是引发SystemExit异常。
此外,如果你打印它,它会给出一个消息:
>>> print (quit) Use quit() or Ctrl-Z plus Return to exit >>>
包含此功能是为了帮助不了解Python的人。毕竟,新手退出Python时最可能做的事情之一就是输入quit。
quit
然而,quit应该在产品代码中使用不。这是因为它只在加载site模块时才有效。相反,这个函数应该只在解释器中使用
此外,它在打印时也会给出一条信息:
>>> print (exit) Use exit() or Ctrl-Z plus Return to exit >>>
然而,像quit一样,exit被认为不适合在生产代码中使用,应该保留在解释器中使用。这是因为它也依赖于site模块
exit
sys.exit()也会引发SystemExit异常。这意味着它在这方面与quit和exit相同。
然而,与这两个不同的是,sys.exit被认为适合在生产代码中使用。这是因为sys模块将一直存在
sys.exit
sys
os._exit()退出程序不调用清理处理程序,刷新stdio缓冲区等。因此,它不是标准的退出方式,只应在特殊情况下使用。其中最常见的是在os.fork创建的子进程中。
os.fork
注意,在给出的四个方法中,只有这个方法是唯一的
总之,所有四个方法都退出程序。但是,前两种方法被认为不适合在生产代码中使用,而最后一种方法是非标准的、肮脏的方法,只在特殊场景中使用。因此,如果您想正常退出程序,请使用第三种方法:sys.exit。
或者,在我看来更好的是,你可以直接做sys.exit在幕后所做的事情并运行:
raise SystemExit
这样,您就不需要首先导入sys。
然而,这种选择只是一种风格,完全取决于你自己。
sys.exit是规范的退出方式。
在内部sys.exit只会引发SystemExit。然而,调用# eyz0比直接抛出SystemExit更习惯。
os.exit是一个低级的系统调用,它直接退出,不调用任何清理处理程序。
os.exit
quit和exit的存在只是为了提供一个简单的方法来退出Python提示符。这适用于新用户或不小心输入了Python提示符,并且不想知道正确语法的用户。他们可能会尝试输入exit或quit。虽然这不会退出解释器,但它至少会发出一条消息,告诉解释器出路:
>>> exit Use exit() or Ctrl-D (i.e. EOF) to exit >>> exit() $
这本质上只是利用解释器打印您在提示符下输入的任何表达式的__repr__这一事实的一种hack。
__repr__