在Python中,有两个同名的函数,exit()和sys.exit().有什么区别,什么时候应该使用一个而不是另一个?
mik*_*iku 446
exit是交互式shell的帮助sys.exit程序- 旨在用于程序.
该
site模块(在启动期间自动导入,除非-S给出命令行选项)将几个常量添加到内置命名空间(例如exit).它们对交互式解释器shell很有用,不应在程序中使用.
从技术上讲,他们大致相同:提高SystemExit.sys.exit在sysmodule.c中这样做:
static PyObject *
sys_exit(PyObject *self, PyObject *args)
{
PyObject *exit_code = 0;
if (!PyArg_UnpackTuple(args, "exit", 0, 1, &exit_code))
return NULL;
/* Raise SystemExit so callers may catch it or clean up. */
PyErr_SetObject(PyExc_SystemExit, exit_code);
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
虽然分别exit在site.py和_sitebuiltins.py中定义.
class Quitter(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return 'Use %s() or %s to exit' % (self.name, eof)
def __call__(self, code=None):
# Shells like IDLE catch the SystemExit, but listen when their
# stdin wrapper is closed.
try:
sys.stdin.close()
except:
pass
raise SystemExit(code)
__builtin__.quit = Quitter('quit')
__builtin__.exit = Quitter('exit')
Run Code Online (Sandbox Code Playgroud)
请注意,有一个第三个退出选项,即os._exit,它在不调用清理处理程序,刷新stdio缓冲区等的情况下退出(并且通常只能在a之后的子进程中使用fork()).
Sta*_*kin 12
exit()/
sys.exit()命令?通常,代码会逐行运行直到结束,然后程序自动退出。有时,我们想要求程序在完整周期运行之前关闭。一个示例情况是,当您实施身份验证并且用户未能通过身份验证时,在某些情况下您希望退出程序。
exit()退出Python。
也许你不知道这一点,但它是 的同义词,是为了使 python 更加用户友好quit()而添加的。quit()设计用于与交互式 shell 配合使用。
用法:按原样
使用内置的exit()开箱即用,无需导入任何库。只需输入以下内容:
exit()
Run Code Online (Sandbox Code Playgroud)
执行时间:0.03s
优点:
sys.exit()(有例外)缺点:
sys.exit()退出 Python 并引发 SystemExit 异常(需要导入)。设计用于在程序内部工作。
用法:
import sys
sys.exit()
Run Code Online (Sandbox Code Playgroud)
执行时间(仅导入和sys.exit()):0.07s
或者您可以使用 SystemExit 异常的消息:
添加了finally块来说明代码清理子句。灵感来自@Nairum。
import sys
try:
sys.exit("This is an exit!")
except SystemExit as error:
print(error)
finally:
print("Preforming cleanup in 3, 2, 1..")
# Do code cleanup on exit
Run Code Online (Sandbox Code Playgroud)
输出:
这是一个出口!
在 3、2、1.. 中执行清理
优点:
finally子句try缺点:
exit()如果您不需要带有可选消息的异常,请使用exit(),这更快并且是内置的。如果您需要带有可选消息的异常的更多功能,请使用sys.exit()。
在代码示例中我使用的是 Python 3.x