所以这一直困扰着我,我无法在网上找到任何关于它的信息。有人可以在python中解释这个行为吗?为什么它返回True而不是抛出异常?感谢
In [1]: 1 < [1, 2, 3]
Out[1]: True
答案 0 :(得分:9)
确实抛出异常 - 无论如何:
$ python3
Python 3.3.0 (default, Apr 17 2013, 13:40:43)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 < [1,2,3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < list()
Python曾经让比较在过去像这样通过,因为有时候能够在异构容器中自动排序所有内容,但这导致了更多的错误而不是方便,所以它在Python 3中得到修复
答案 1 :(得分:4)
尝试使排序更容易。 Python尝试以一致但任意的顺序使没有有意义的比较操作的对象进行比较。在Python 3中,他们改变了它;这将是Python 3中的TypeError。
答案 2 :(得分:4)
如果我没记错的话,你在py2中看到的行为实际上是比较类型。
>>> 1 < [1,2,3]
True
>>> 1 > [1,2,3]
False
>>> int < list
True
>>> int > list
False
当我进一步深入研究时,我认为它比较了这些类型的名称,尽管可能有些间接,可能是通过其中一种,但我无法分辨:
>>> repr(int)
"<type 'int'>"
>>> int.__name__
'int'
>>> repr(list)
"<type 'list'>"
>>> list.__name__
'list'
>>> 'int' < 'list'
True
>>> "<type 'int'>" < "<type 'list'>"
True