为什么Python的strtobool方法返回一个整数而不是布尔值?

5

strtobool是Python标准库中很棒的一个函数。

然而,它返回一个整数而不是布尔值,需要进行包装,例如bool(strtobool(x))

表面上看,这似乎不直观且具有误导性,尤其在像Python这样的弱类型语言中易被忽略。
是什么设计决策导致了这种方法?


1
有什么区别,为什么需要包装它?布尔值只是整数的一个子类。if strtobool(x) 的行为就像 if bool(strtobool(x)) 一样吗?你有一个实际上会有区别的例子吗? - FlyingTeller
5
在使用类型提示时,它会创建代码警告。它还会破坏使用 isinstance(x, bool) 的任何代码。但即使不使用类型提示,如果编写/使用不使用 isinstance 的更好的代码,创建一个名为 strtobool 并返回 int 的方法似乎是一种意外的实现细节。答案可能只是“没有好的设计理由,编写它的人只是这样决定的”,但我怀疑这里有人知道某些重要细节影响了这个决定。 - Jethro
2个回答

1

我不知道为什么 strtobool() 返回一个 int。在大多数情况下,int 可以用作 bool,但是如果您实际上需要一个 bool,则建议您在脚本中创建一个新函数,类似于以下内容:

from distutils.util import strtobool as stb
def strtobool(string: str)->bool: return bool(stb(string))

这使得调用 strtobool() 返回一个布尔值。

1
目前很可能任何人都无法预测。根据PEP 632的规定,distutils已被弃用并将在Python 3.12中被移除。关于strtobool,建议自行重新实现它。以下是引用的传统文档地址https://docs.python.org/3.9/distutils/apiref.html。因此,在简短地说,不要使用它,并且在您的版本中,可以随意返回适当的bool

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