首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中sys.exit()和exit()的区别

Python中sys.exit()和exit()的区别
EN

Stack Overflow用户
提问于 2011-06-28 11:05:31
回答 3查看 325.7K关注 0票数 469

在Python语言中,有两个名称类似的函数:exit()sys.exit()。有什么区别,什么时候我应该使用一个而不是另一个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-28 11:08:55

exit是交互式外壳的帮助器- sys.exit旨在用于程序中。

site模块(在启动期间自动导入,除非提供了-S命令行选项)将几个常量添加到内置名称空间(例如exit__)。它们对于交互式解释器外壳很有用,不应该在程序中使用。

从技术上讲,它们做的基本上是一样的:提高SystemExitsys.exit在中执行此操作

代码语言:javascript
复制
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中定义。

代码语言:javascript
复制
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()之后的子进程中使用)。

票数 536
EN

Stack Overflow用户

发布于 2017-06-04 20:11:22

如果我在代码中使用exit()并在shell中运行它,它会显示一条消息,询问我是否要终止该程序。这真的很烦人。See here

但在这种情况下,sys.exit()更好。它会关闭程序,不会创建任何对话框。

票数 46
EN

Stack Overflow用户

发布于 2022-02-14 15:15:31

解决方案、来源、差异和速度

为什么我们需要exit() / sys.exit()命令?

通常,代码会一直运行到最后,程序会自动存在。有时,我们会要求程序在整个周期运行之前关闭。一个例子是,当您实现身份验证时,用户身份验证失败,在某些情况下,您希望退出程序。

The exit()

退出Python。

您可能不知道这一点,但它是quit()的同义词,并且是在quit()之后添加的,以使python更加用户友好。设计用来处理交互式shell。

用法:按原样使用内置的exit(),无需导入任何库。只需键入以下内容:

代码语言:javascript
复制
exit()

执行时间:0.03s

优势:

在Python2.x和python 3.x

  • Fast

  • Can中使用(built-in)

  • Works的速度更快
  • 的用法与sys.exit()完全相同(但有例外)

缺点:

  • No exception message

The sys.exit()

退出Python并引发SystemExit异常(需要导入)。设计用来在程序内部工作。

使用:

代码语言:javascript
复制
import sys
sys.exit()

执行时间(仅导入和sys.exit()):0.07s

或者,您可以使用SystemExit异常的消息:

代码语言:javascript
复制
import sys
try:
  sys.exit("This is an exit!")
except SystemExit as error:
  print(error)

输出:

代码语言:javascript
复制
This is an exit!

优势:

对于exception

  • You 2.x和python 3.x

try

  • Works的
  • 触发器可以使用不带try
  • Works的dialog
  • Utilizes finally子句的异常message
  • Closes

缺点:

exit()相比,

  • 需要57.1%的import
  • Slower

结论:

如果你不需要一个带有可选消息的异常,那么使用exit(),这会更快,而且是内置的。如果您需要具有可选消息的异常的更多功能,请使用sys.exit()

在代码示例中,我使用的是Python 3.x

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6501121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档