我的代码意外地使用不等式将dict与int进行比较,结果发现任何dict在测试时都会计算为大于int的值。
d = {'a': 1, 'b': 2}
d > 0
Out[20]: True
d > 10e99999999999999
Out[21]: True
为什么会发生这种情况而不是类型错误?
这种情况在Python 2.7上运行
答案 0 :(得分:8)
不同类型的对象,除了不同的数字类型和不同的字符串类型,从不比较相等;这些对象是一致的但是任意地排序(因此对异构数组进行排序会产生一致的结果)。
Python 3.3 documentation取而代之的是:
<,< =,>和> =运算符会在将复数与另一个内置数值类型进行比较时引发TypeError异常,当对象具有无法比较的不同类型时,或者在其他情况下没有明确排序的地方。
从Python 3开始,意味着您所看到的内容已不再可能,但这样的比较会产生与您预期的TypeError
相同的效果。
答案 1 :(得分:3)
首先,Python团队同意你的观点 - 在Python 3中,这是一个错误。
在早期的Python版本中,所有内容都是可比较的,为了使它保持一致,某些类型总是先于其他类型排序。
答案 2 :(得分:0)
显然在Python 2.7中,字典总是大于整数。显然它是按字母顺序排列的?