sys.exit()
或os._exit()
而退出,那么Python如何确定退出时要使用什么退出代码?似乎是0,这很有道理,因为它在*nix系统上表示无错误。然而,它是否总是以0退出(除了上述情况)呢?令人惊讶的是,在进行了相当多的在线搜索之后,我发现没有明确说明它会以0退出,除非另有规定。
sys.exit
文档中指定了默认的退出状态为0
,而os._exit
的文档则指定了类UNIX操作系统下"正常"退出状态的常量os.EX_OK
,但我找不到任何关于一般退出状态的保证。
除此之外,我能给你的最好答案是,在CPython中,python
可执行文件(包括Windows上的python.exe
/pythonw.exe
)通过调用Py_Main
在python.c
中实现,并返回其返回值;根据Py_Main
的文档保证,退出状态为:
0
表示解释器正常退出(即没有异常),1
表示解释器由于异常退出,2
表示参数列表不表示有效的Python命令行。请注意,如果引发了未经处理的
SystemExit
,则只要未设置Py_InspectFlag
,此函数将不会返回1
,而是退出进程。
因此,对于CPython来说,简单地在__main__
模块的结尾处运行而没有活动异常应始终返回0
,尽管其他解释器从技术上讲不一定需要这样做。
这符合大多数应用程序期望的隐含退出状态规则;虽然没有明确说明Python必须遵循这些规则,但对于在命令行UNIX类似世界中成长的工具来说,违反这些约定将是极不寻常的。
Programs/python.c
中的 main()
返回 Py_Main()
的返回值Modules/main.c
中的 Py_Main()
返回 run_file()
的返回值Modules/main.c
中的 run_file()
返回 0
,除非 PyRun_AnyFileExFlags()
返回非零Python/pythonrun.c
中的 PyRun_AnyFileExFlags()
在出现 SystemExit
异常时会调用 exit()
,因此如果脚本设置了退出码,它将不会返回。仅当存在内部错误时,它才会返回非零。run_file()
的返回值决定了脚本的默认退出码为 0
。退出状态码0比Python诞生的时间更早,它是POSIX标准的一部分。所有行为良好的程序都会使用0来表示成功退出。
Python的默认退出代码是0。可以在这里https://docs.python.org/2/library/exceptions.html#exceptions.SystemExit查看文档。
然而,退出代码将是在exit()
或quit()
函数中指定的内容。因此,如果您正在使用脚本,则应始终在脚本或脚本文档中检查该特定脚本将返回什么。例如:您可以在终端中启动python,只需键入quit(1)
即可退出,并返回1个返回代码,即使没有错误。
sys.exit()
,那么就不会引发SystemExit
异常,因此这并不完全正确。 - user325117