Python中的退出代码

328

我收到一条消息,上面写着 脚本 xyz.py 返回退出码 0。这是什么意思?

在 Python 中,退出码代表什么?有多少种退出码?哪些退出码比较重要?


4
你在哪里看到这条消息? - Jeremy Cantrell
3
在PythonWin的底部。 - sundeep
16个回答

6
我建议使用exit(0)内置函数进行干净的关闭,而不是使用sys.exit()。
我不确定这是否是一个好建议。 文档中提到:
站点模块(在启动时自动导入,除非给出-S命令行选项)向内置命名空间添加了几个常量。它们对交互式解释器外壳很有用,但不应在程序中使用。 然后:
exit(code=None)
对象打印一个消息,如“使用quit()或Ctrl-D(即EOF)退出”,当调用时,引发指定退出代码的SystemExit异常。
如果我们将其与sys.exit()文档进行比较,它使用的机制相同,即引发SystemExit异常。

3

在许多编程语言中,退出代码由程序员自己决定。因此,您需要查看程序源代码(或手册)。零通常意味着“一切顺利”。


-1

解决方法: 为了应对gitlab-ci中的错误(https://gitlab.com/gitlab-org/gitlab-runner/-/issues/27668),我简单地生成了一个带有错误代码的文件:

Python部分:

with open("error_code.log", 'w') as file:
   file.write('2') # this will trigger a warning

然后在yml文件中:

.step_name:
  variables:
    # my vars
  script:
    - python my_code.py arg1 arg2
    - exit `cat error_code.log`
  allow_failure:
    exit_codes:
      - 2

-1

script program.py returned error code 0意味着program.py没有任何错误。只需将您得到的数字输入到os.strerror()中,即可将其转换为一条消息。


你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community
程序退出代码与HTTP响应代码没有直接关系。 - undefined
@CrazyChucky 我只是提醒所有看到这条消息的人。 - undefined

-1

要退出Python代码的任何位置,你可以使用sys.exit()

这被称为正常终止,用例包括: a) 错误密码 b) 错误的API密钥 c) 发生异常等等。

代码示例:

import sys; sys.exit()


你好,这是一个重复的答案,与最受欢迎的答案相同。请仅提交独特的答案。 - Destroy666

-4
为了允许异常处理程序和其他东西执行,我建议使用exit(0)内置函数进行干净的关闭,而不是使用sys.exit()函数来突然终止进程。

1
那么有什么区别?这些信息是从哪里来的?您是否指的是“在退出”处理程序的执行,还是指其他方面?SystemExit似乎都会被触发。 - 0xC0000022L
嗯,我把它和 os._exit 搞混了,两者似乎都会引发 SystemExit - vidstige
3
sys.exit()exit() 一样,都能够干净地关闭程序。它们都会引发 SystemExit 异常,实际上 exit() 更适用于交互式会话,而非脚本。因此在概念上讲,sys.exit() 是更合适的选择。你可能和 os._exit() 混淆了,后者才是会导致程序突然终止的函数。 - MestreLion
2
补充一下@MestreLion的观点:exit()甚至不是真正的内置函数;当导入site模块时,它被强行加入内置函数中。这在大多数情况下是隐式发生的,但对于那些试图快速运行且不依赖第三方模块(安装在site-packages中)的Python脚本,可以使用-S开关来禁用完全导入site,并且exit()将不存在(sys.exit()仍然存在)。 - ShadowRanger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接