だから、これは私を悩ませていて、それについてオンラインで何かを見つけることができませんでした. 誰かがPythonでこの動作を説明してもらえますか? 例外をスローするのではなく、True を返すのはなぜですか? ありがとう
In [1]: 1 < [1, 2, 3]
Out[1]: True
だから、これは私を悩ませていて、それについてオンラインで何かを見つけることができませんでした. 誰かがPythonでこの動作を説明してもらえますか? 例外をスローするのではなく、True を返すのはなぜですか? ありがとう
In [1]: 1 < [1, 2, 3]
Out[1]: True
それは例外をスローします - とにかく、最近では:
$ 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 で修正されました。
並べ替えを簡単にするための試みでした。Python は、意味のある比較操作を持たないオブジェクトを、一貫性があるが任意の順序で比較しようとします。Python 3 では、それが変更されました。これは Python 3 では TypeError になります。
私の記憶が正しければ、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