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

2025-02-08 08:52:00
admin
原创
47
摘要:问题描述:在 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1572  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1355  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   0  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   0  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用