在Python中,exit(0)和exit(True)有区别吗?

6

我不喜欢使用整数,并且无法记住它们的含义(即使是多年之后)。因此,我想要为它们设置常量。

这两个调用有什么区别吗?

sys.exit(0)
sys.exit(True)

还是有其他常量吗?

我的问题背景是,我在一个情况下脚本的调用者与另一个情况下不同。


在Python中,True == 1(真等于1),而且issubclass(bool, int)(布尔类型是整型的子类)。程序的退出代码/状态可以被调用者使用。 - falsetru
并添加问题:exit(0)sys.exit(0)之间有什么区别吗? - hiro protagonist
1
True 的整数值不是1吗? - Lasse V. Karlsen
请在您的问题中添加其他问题。 - matan7890
我无法确定你的意思是“我不知道0代表什么”还是“我不知道从进程返回0意味着什么”。在这两种情况下,考虑到多年的使用,这似乎表明存在学习困难。如果是144016777215,我可以理解,但是零? :-) - paxdiablo
2个回答

2

使用sys.exit(True)会让用户认为脚本因为非零错误而退出:

Ξ /tmp → cat true_exit.py
import sys
sys.exit(True)
Ξ /tmp → python true_exit.py
↑1 /tmp → echo $?
1

如果你想使用True/False代替退出号码,你可以定义自己的常量或者使用True/False:

Ξ /tmp → cat false_exit.py
import sys
sys.exit(False)
Ξ /tmp → python false_exit.py
Ξ /tmp → echo $?
0

请注意,如果您使用在sysexits.h中定义的相同常量(在*nix和OS X上可能在/usr/include/sysexits.h中可用),则对于代码的其他维护者可能会有所帮助。

1

以下是sys.exit()的官方文档:

sys.exit([arg])

退出 Python。这是通过引发 SystemExit 异常来实现的,因此会执行 try 语句中 finally 子句指定的清理操作,并且可以在外层拦截退出尝试。

可选参数 arg 可以是一个整数,表示退出状态(默认为零),或者是另一种类型的对象。如果它是一个整数,则零被认为是“成功终止”,任何非零值都被 shells 等视为“异常终止”。大多数系统要求它在 0-127 范围内,并产生未定义的结果。一些系统有一个约定,将特定的退出代码赋予特定的含义,但这些通常不太完善;Unix 程序通常使用 2 表示命令行语法错误,使用 1 表示其他所有类型的错误。如果传递了另一种类型的对象,则 None 相当于传递零,任何其他对象都会被打印到 stderr 并导致退出代码为 1。特别地,sys.exit("some error message") 是在出现错误时快速退出程序的方法。

这里的True对应于1
退出代码可以从0到127,正如文档中所说,您可以选择要分配的退出代码,但默认为0,True将对应于1

没有必要引用现有的文档。提供一个链接就足够了,我当然会阅读它。 - buhtz
1
@buhtz:相反,SO的习惯是引用文档。仅提供链接的答案是不受欢迎的。 - Basile Starynkevitch
我在结尾处加入了您提到的两种特定情况的差异。此外,StackOverflow礼仪要求引用链接的相关部分,否则如果该页面失效,则答案就没有价值。我确保在底部明确写出了您想知道的内容,请让我知道是否不够充分或需要澄清的地方。 - Meghdeep Ray
4
实际上,最好描述链接内容而不只提供链接,因为链接可能在将来失效。 - Iamsomeone

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