【问题标题】:Why does the following evaluate to a ValueError in python?为什么以下评估为 Python 中的 ValueError?
【发布时间】:2020-04-25 17:08:33
【问题描述】:

不久前我们正在编写一些代码,但遇到了一个小问题。我们想尝试将浮点数转换为整数

代码如下:

x = int(input(())
print x

我们尝试了代码并将 5.5.它评估为ValueError。从逻辑上讲,它在逻辑上是合理的。但是如果我们尝试下面的代码:

x = int(float(input(()))x = int(5.5),其计算结果为 5。

为什么会这样?

【问题讨论】:

  • 如果您阅读错误消息,您将能够更轻松地了解发生了什么。 x = int(5.5) 不是正确的比较,因为 input 给出了一个字符串。正确的比较是x = int('5.5'),这会导致相同的 ValueError

标签: python integer valueerror


【解决方案1】:

在第一种情况下,您调用的是 int("5.5"),因为 input() 返回一个字符串。这是一个 ValueError,因为 5.5 不是 int,python 的设计者决定不进行任何隐式转换。

在第二种情况下,您需要调用 float("5.5"),即 5.5,因为“5.5”可以按照您的要求转换为浮点数,然后调用 int(5.5),这是转换浮点数的结果到一个 int (python 为此使用截断;如果这不是你想要的,你可以调用 round() 代替)。

第三种情况与第二种情况的第二步完全相同。

【讨论】:

    【解决方案2】:

    这是因为 input() 将值作为字符串数据类型。当您使用 "5" 时,转换为 int() 有效,但将字符串输入 "5.5" 转换为 int() 会出错,因为 python 不支持此操作。在这种情况下,您必须先将其转换为 float(),然后再转换为 int() 以获得整数值。

    【讨论】:

      【解决方案3】:

      我认为x = int(5.5) 没有导致任何值错误。第一个问题是,是的,您不能直接将输入结果与 int 或 float 进行比较。为了确保它,让我们做这个小实验:

      >>> x = input()
      >>? 20
      >>> print(type(x))
      >>> <class 'str'>
      

      从这个实验中,您看到即使您输入“任何数字”进行输入,它也会将您的输入作为字符串返回。让我们看看int(input()) 操作发生了什么:

          x = int(input())
          5.5
      Traceback (most recent call last):
        File "<input>", line 1, in <module>
      ValueError: invalid literal for int() with base 10: '5.5'
      

      当您尝试“直接”将浮点数转换为整数时会出现此问题。 Python 不能直接将 float 转换为 int。通过将浮点数指定为数字原始数据类型,还有另一个技巧可以帮助解决这个问题。这发生在何时,让我们看看我们是否将 float 作为另一个解析器添加:

      x = int(float(input()))
      5.5
      print(type(x))
      <class 'int'>
      

      解决方法很简单,直接把你的输入解析为int,然后比较一下:

      x = int(float(input()))
      if x == 5 or x == int(5.5):
          #do something
      

      希望对您有所帮助。祝你好运!

      【讨论】:

        猜你喜欢
        • 2013-09-02
        • 1970-01-01
        • 2019-06-30
        • 2012-12-06
        • 2014-05-19
        • 2019-05-24
        • 2015-03-15
        • 1970-01-01
        • 2014-06-17
        相关资源
        最近更新 更多