代码之家  ›  专栏  ›  技术社区  ›  Jason Baumgartner

使用python 3,为什么int方法不处理表示float的字符串?这是设计的吗?

  •  0
  • Jason Baumgartner  · 技术社区  · 6 年前

    使用python 3.5+,以下功能可以正常工作:

    int("10")
    

    但是,当使用int方法转换表示浮点的字符串时,它会引发一个错误:

    >>> int("10.0")
    
    ValueError: invalid literal for int() with base 10: '10.0'
    

    这可以通过以下方法解决:

    >>> int(float("10.0"))
    

    综上所述,int(x)可以:

    • 如果x是string类型并表示整数,则将字符串转换为整数。

    • 如果x是float类型,则将float转换为整数。

    但是,它不能同时执行1和2。

    为什么Python的语言规范不允许从表示浮点的字符串返回整数,而不必先强制转换为浮点?像Java这样的其他语言是否需要中间的步骤来表示浮点数的字符串?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Jean-François Fabre    6 年前

    int 是一个类,它在其构造函数中接受参数。

    如果第一个参数是 一串 ,并且没有提供其他参数,python尝试将字符串参数解析为十进制整数。任何其他字符都会触发异常。

    注意 int("3E",16) 有效,但只是因为字符串与16基兼容。和 int('002') 也在哪里工作 int(002) 不像 002 在python中不再是有效的整数(不允许前导零)。

    传递整数时, int 只返回完全相同的对象(不需要构建另一个对象,因为整数是不可变的),并且在传递浮点值时, int 构造函数将值截断为整数。

    所以 int 构造器已经很容易使用了,但是它也可以防止误用。