我有一个让我疯狂的问题。通常,执行int(20.0)
会导致20
。到现在为止还挺好。但是:
levels = [int(gex_dict[i]) for i in sorted(gex_dict.keys())]
而gex_dict[i]
返回一个浮点数,例如20.0
,结果为:
"invalid literal for int() with base 10: '20.0'"
我离咀嚼最后一块键盘只有一步之遥。
答案 0 :(得分:15)
'20.0'
是一个字符串,而不是float
;你可以通过错误消息中的单引号来判断。您可以首先使用int
进行解析,然后使用float
将其截断:
int
>>> int(float('20.0'))
20
(虽然你可能想在你的字典中存储花车而不是字符串,因为这是你似乎期待的。)
答案 1 :(得分:2)
看起来值是字符串,而不是浮点数。所以你需要int(float(gex_dict[i]))
答案 2 :(得分:2)
看起来问题是gex_dict[i]
实际上返回了一个浮点'20.0'
的字符串表示。虽然int()具有从float转换为int的能力,以及整数到int的字符串表示形式。它没有能力从float的字符串表示形式转换为int。
int的文档可以在这里找到: http://docs.python.org/library/functions.html#int
答案 3 :(得分: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())]