在Python语言中,有两个名称类似的函数:exit()和sys.exit()。有什么区别,什么时候我应该使用一个而不是另一个?
发布于 2011-06-28 11:08:55
exit是交互式外壳的帮助器- sys.exit旨在用于程序中。
site模块(在启动期间自动导入,除非提供了-S命令行选项)将几个常量添加到内置名称空间(例如exit__)。它们对于交互式解释器外壳很有用,不应该在程序中使用。
从技术上讲,它们做的基本上是一样的:提高SystemExit。sys.exit在中执行此操作
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;
}而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')注意,还有第三个退出选项,即os._exit,它在不调用清理处理程序、刷新stdio缓冲区等情况下退出(通常应该只在fork()之后的子进程中使用)。
发布于 2017-06-04 20:11:22
如果我在代码中使用exit()并在shell中运行它,它会显示一条消息,询问我是否要终止该程序。这真的很烦人。See here
但在这种情况下,sys.exit()更好。它会关闭程序,不会创建任何对话框。
发布于 2022-02-14 15:15:31
解决方案、来源、差异和速度
为什么我们需要exit() / sys.exit()命令?
通常,代码会一直运行到最后,程序会自动存在。有时,我们会要求程序在整个周期运行之前关闭。一个例子是,当您实现身份验证时,用户身份验证失败,在某些情况下,您希望退出程序。
The exit()
退出Python。
您可能不知道这一点,但它是quit()的同义词,并且是在quit()之后添加的,以使python更加用户友好。设计用来处理交互式shell。
用法:按原样使用内置的exit(),无需导入任何库。只需键入以下内容:
exit()执行时间:0.03s
优势:
在Python2.x和python 3.x
sys.exit()完全相同(但有例外)缺点:
The sys.exit()
退出Python并引发SystemExit异常(需要导入)。设计用来在程序内部工作。
使用:
import sys
sys.exit()执行时间(仅导入和sys.exit()):0.07s
或者,您可以使用SystemExit异常的消息:
import sys
try:
sys.exit("This is an exit!")
except SystemExit as error:
print(error)输出:
This is an exit!优势:
对于exception
,try
tryfinally子句的异常message缺点:
与exit()相比,
结论:
如果你不需要一个带有可选消息的异常,那么使用exit(),这会更快,而且是内置的。如果您需要具有可选消息的异常的更多功能,请使用sys.exit()。
在代码示例中,我使用的是Python 3.x
https://stackoverflow.com/questions/6501121
复制相似问题