真值评估无效的内置Python值是否存在?

ger*_*rit 5 python boolean

我有一组子类,应该都定义一个x应该评估为True或False 的属性.为了在忘记在子类中设置此值时捕获错误,我想在其超类中将其设置为真值评估导致错误的值.Python有这种行为的内置值吗?我有点期望NotImplemented这种行为,但它的评估结果是True.

我可以将其设置为numpy.array([0, 0])在那里if x:提高ValueError,但感觉不对.同样,我可以定义自己的类来__bool__引发异常.但是否有适合此目的的内置价值?

其他替代方案是设置属性(抽象与否)或根本不定义(所以我们得到AttributeError).

(我正在使用Python 3.4,以防万一)

ger*_*rit 1

将来,NotImplemented在布尔上下文中将无效。

从 Python 3.9 开始,NotImplemented不推荐在布尔上下文中使用。从文档中:

不推荐NotImplemented在布尔上下文中进行计算。虽然它当前评估为 true,但它会发出一个DeprecationWarning. 它将TypeError在Python的未来版本中引发。

截至 2020 年 10 月 6 日,Python 的未来版本(据我所知)尚未确定,但在未来的某个时候(我预计不会在 Python 3.11 之前),NotImplemented将成为内置的 Python 值,其中真实评价无效。