7

私は本当に私を怒らせる問題を抱えています。通常実行int(20.0)すると、 が発生し20ます。ここまでは順調ですね。しかし:

levels = [int(gex_dict[i]) for i in sorted(gex_dict.keys())]

whilegex_dict[i]は float を返します。たとえば20.0、次の結果になります。

"invalid literal for int() with base 10: '20.0'"

キーボードの最後のピースをむしゃむしゃ食べるまであと一歩です。

4

4 に答える 4

17

'20.0'float;ではなく、文字列です。エラー メッセージ内の一重引用符で確認できます。int最初に で解析しfloat、次に で切り詰めることで、それを取得できますint

>>> int(float('20.0'))
20

(おそらく、文字列の代わりにフロートを辞書に格納したいかもしれませんが、それはあなたが期待しているように見えるからです.)

于 2012-06-05T13:31:06.863 に答える
2

値は浮動小数点数ではなく文字列のようです。だからあなたが必要ですint(float(gex_dict[i]))

于 2012-06-05T13:31:23.143 に答える
2

問題は、gex_dict[i]実際には float の文字列表現を返すこと'20.0'です。int() には float から int にキャストする機能と、整数の文字列表現を int にキャストする機能があります。float の文字列表現から int にキャストする機能はありません。

int のドキュメントは次の場所にあります: http://docs.python.org/library/functions.html#int

于 2012-06-05T13:32:35.607 に答える
1

問題は、フロートではなく文字列があることです。これを比較として参照してください。

>>> int(20.0)
20
>>> int('20.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '20.0'

最初に float に変換してから int に変換することで、この問題を回避できます。

>>> int(float('20.0'))
20

したがって、あなたの場合は次のようになります。

levels = [int(float(gex_dict[i])) for i in sorted(gex_dict.keys())]
于 2012-06-05T13:32:15.867 に答える