【发布时间】:2019-09-05 18:41:27
【问题描述】:
在 Python 2 中,可以通过隐式比较类型的文本字符串(即按字典顺序,字符串 'int' 小于比字符串'str' 和字符串'list' 小于字符串'tuple')。
因此,在 Python 2 中,5 < 'hello' 返回 True。可以阅读更多关于为什么在回答 Why is ''>0 True in Python? 时允许这样做。
在 Python 3 中,这会引发 builtins.TypeError: unorderable types: int() < str() 异常。
这个web page 说
Python 3 中严格的比较方法使其通常 无法比较不同类型的对象。
这是否意味着有一些内置类型或特殊情况可以比较任何内置类型而不会导致TypeError?我不是在谈论自定义类型,其中实现了必要的 dunder 方法以正确支持比较。
【问题讨论】:
-
当然,您可以先将
int与float进行比较。您也可以将它们与bool进行比较。您还可以将set与frozenset进行比较。 -
Python 2 的行为不仅仅是对类型名称进行字符串比较。例如,
5 < ArithmeticError()即使'int' > 'ArithmeticError'。
标签: python python-3.x comparison operators typing