我最近在Python 3.5中遇到了这个问题:

>>> flt = '3.14'
>>> integer = '5'
>>> float(integer)
5.0
>>> float(flt)
3.14
>>> int(integer)
5
>>> int(flt)
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    int(flt)
ValueError: invalid literal for int() with base 10: '3.14'


为什么是这样?似乎应该返回3。我是在做错事,还是有充分的理由发生?

最佳答案

int()需要包含整数文字的数字或字符串。根据Python 3.5.2文档:


  如果x不是数字或给定base,则x必须是字符串,bytesbytearray实例,以基数为底的整数。 (已强调)


含义int()只能转换包含整数的字符串。您可以轻松地做到这一点:

>>> flt = '3.14'
>>> int(float(flt))
3


这会将flt转换为浮点数,然后对int()有效,因为它是数字。然后,它将通过删除小数部分转换为整数。

07-24 09:44
查看更多