7

我有一个真正让我发疯的问题。通常这样做int(20.0)会导致20. 到现在为止还挺好。但:

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

whilegex_dict[i]返回一个浮点数,例如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() 能够将浮点数转换为 int,并将整数的字符串表示形式转换为 int。它不具备将浮点数的字符串表示形式转换为 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 回答