2

私のコードは、誤って不等式を使用して dict を int と比較しましたが、int より大きいとテストされると、どの dict も True と評価されることがわかりました。

d = {'a': 1, 'b': 2}
d > 0
Out[20]: True
d > 10e99999999999999
Out[21]: True

型エラーではなく、なぜこれが発生するのですか?

これは、Python 2.7 で実行すると発生します。

4

3 に答える 3

8

Python 2.7 ドキュメントから:

異なる数値型と異なる文字列型を除いて、異なる型のオブジェクトが等しいことは決してありません。そのようなオブジェクトは一貫して任意に順序付けられます(異種配列をソートすると一貫した結果が得られるように)。

Python 3.3 のドキュメントには、代わりに次のように記載されています。

<、<=、>、および >= 演算子は、複素数を別の組み込み数値型と比較するとき、オブジェクトが比較できない異なる型である場合、または定義されていないその他の場合に、TypeError 例外を発生させます。注文。

あなたが見ているものはPython 3の時点ではもはや不可能ですが、代わりにそのような比較はTypeErrorあなたが期待したような結果をもたらします.

于 2017-05-12T19:06:08.073 に答える
3

まず、Python チームはあなたに同意します -- Python 3 では、これはエラーです。

以前のバージョンの Python では、すべてが互いに比較可能であり、一貫性を保つために、いくつかの型は常に他の型よりも前に並べ替えられます。

于 2017-05-12T19:04:05.183 に答える