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

2025-02-08 08:52:00
admin
原创
46
摘要:问题描述:在 Python 中,有两个名称相似的函数,exit()和sys.exit()。它们有什么区别?何时应该使用其中一个?解决方案 1:exit是交互式 shell 的助手 -sys.exit旨在供程序使用。模块site(除非-S给出命令行选项,否则在启动时会自动导入)将几个常量添加到内置命名空间(例如...

问题描述:

在 Python 中,有两个名称相似的函数,exit()sys.exit()。它们有什么区别?何时应该使用其中一个?


解决方案 1:

exit是交互式 shell 的助手 -sys.exit旨在供程序使用。

模块site(除非-S给出命令行选项,否则在启动时会自动导入)将几个常量添加到内置命名空间(例如exit它们对于交互式解释器 shell 很有用,不应在程序中使用


从技术上讲,它们的作用基本相同:在sysmodule.cSystemExit中提升.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;
}

而分别在site.py和_sitebuiltins.pyexit中定义。

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 缓冲区等(并且通常只在 a 之后的子进程中使用fork())。

解决方案 2:

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

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

解决方案 3:

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

为什么我们需要exit()/

sys.exit()命令?

通常,代码会逐行运行直到结束,然后程序会自动退出。有时,我们想让程序在完整循环运行之前关闭。例如,当您实施身份验证并且用户身份验证失败时,在某些情况下,您希望退出程序。

exit()

退出 Python。

也许你不知道,但它是的同义词quit(),是后来添加的,quit()以使 python 更加用户友好。旨在与交互式 shell 配合使用。

用法:
直接使用内置功能exit(),无需导入任何库。只需输入以下内容:

exit()

执行时间:0.03秒

优点:

  • 使用速度更快(内置)

  • 适用于 Python 2.x 和 Python 3.x

  • 快速地

  • 可以完全按照以下方式使用sys.exit()(例外)

缺点:

  • 无异常信息

sys.exit()

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

用法:

import sys
sys.exit()

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

或者您可以使用 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

输出:

这是出口!

预成型清理按 3、2、1...

优点:

  • 触发 SystemExit 异常

  • 您可以使用异常消息

  • 不显示对话框就关闭

  • 使用finally条款try

  • 适用于 Python 2.x 和 Python 3.x

缺点:

  • 需要导入

  • 比 慢 57.1%exit()

结论:

如果您不需要带有可选消息的异常,则使用exit(),它更快且内置。如果您需要带有可选消息的异常的更多功能,请使用sys.exit()

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用