【问题标题】:ValueError: invalid literal for int() with base 10: ''ValueError: int() 以 10 为底的无效文字:\'\'
【发布时间】:2022-05-19 00:51:13
【问题描述】:

为什么我会收到此错误?

ValueError: int() 以 10 为底的无效文字:''。

【问题讨论】:

  • 对于目前正在寻找这里的任何人。错误可能是其中一行不是整数形式。例如:“是”的格式不正确,但“3”的格式正确。对于这个问题,第一行可能没有任何“1”、“2”、“3”... 来转换为 int。
  • 当输入字符串在数字之间有空格时出现此错误。此错误基本上意味着您的输入字符串对于字符串到整数的转换无效。对于转换,您的字符串应仅且仅包含以下字符:+-.0123456789

标签: python valueerror


【解决方案1】:

错误的结尾显示了试图解析的值。

作为一个更清楚的例子。

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

在您的情况下,您尝试将空字符串解析为整数。

对于上面的浮点示例,它需要转换两次。

>>> int(float('55063.000000'))
55063

【讨论】:

  • 为了让未来的读者更清楚,我将补充一点,确实,当 int('1.0') 抛出 ValueError 时,int(float('1.0')) 有效。
  • 这应该是这个问题的公认最佳答案。我几乎关闭了页面并没有看到它。谢谢!
  • 添加到答案 int(float('55063.000000')) 因为问题是 get int()。比它真正的最佳答案
  • 为什么会这样? @katyhuff
  • 当我根据上面的答案将字符串转换为浮点数时,它显示ValueError: could not convert string to float:
【解决方案2】:

以下是在 python 中完全可以接受的:

  • 将整数的字符串表示形式传递给int
  • 将浮点数的字符串表示形式传递给float
  • 将整数的字符串表示形式传递给float
  • 将浮点数传递给int
  • 将整数传递给float

但是如果你传递一个字符串表示,你会得到一个ValueError漂浮转换为int,或除整数以外的任何字符串表示形式(包括空字符串)。如果您确实想将浮点数的字符串表示形式传递给int,正如@katyhuff 上面指出的那样,您可以先转换为浮点数,然后再转换为整数:

>>> int('5')
5
>>> float('5.0')
5.0
>>> float('5')
5.0
>>> int(5.0)
5
>>> float(5)
5.0
>>> int('5.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
>>> int(float('5.0'))
5

【讨论】:

  • 这个答案似乎与这个问题没有任何关系。问题是当您在空字符串上调用 int() 时,如何防止出现 ValueError 。 “改用 float()”并不能解决这个问题。你仍然会得到一个 ValueError。
  • @Kevin即使这不能直接回答OP的问题。但是,它确实可以帮助有此问题且不介意int(float(x)) 的人。因为这是搜索此错误时弹出的第一个问题。
  • 哇,这太愚蠢了。为什么不让 int() 接受一个字符串?这正是我所期望的,而不是先将它类型转换为浮点数.....
  • 至少在我的情况下,将类型转换为浮点数不起作用.. 显示的错误是无法将 int 转换为浮点数
【解决方案3】:

遍历文件并转换为 int 的 Pythonic 方式:

for line in open(fname):
   if line.strip():           # line contains eol character(s)
       n = int(line)          # assuming single integer on each line

你想要做的是稍微复杂一些,但仍然不是直截了当的:

h = open(fname)
for line in h:
    if line.strip():
        [int(next(h).strip()) for _ in range(4)]     # list of integers

这样,它一次处理 5 行。在 Python 2.6 之前使用 h.next() 而不是 next(h)

您拥有ValueError 的原因是因为int 无法将空字符串转换为整数。在这种情况下,您需要在转换之前检查字符串的内容,或者排除错误:

try:
   int('')
except ValueError:
   pass      # or whatever

【讨论】:

  • 您的 try/except 无法区分合理预期的内容(空白/空行)和非整数等令人讨厌的内容。
  • 你为什么要区分这些东西?
  • 因为一个是合理可预期和可忽略的,但另一个表明存在错误
  • 为什么空行是可以合理预期的,而非整数不是?
  • 如果您确定您的列表实际上是一个字符串化整数列表,这很好。如果你不确定你可以做n = int(line) if line.is_integer() else int(float(line))
【解决方案4】:

我找到了解决办法。 Python 会将数字转换为浮点数。只需先调用 float 然后将其转换为 int 即可: output = int(float(input))

【讨论】:

  • 这个答案不等于@FdoBad 给出的答案吗?
【解决方案5】:

您收到此错误的原因是您试图将空格字符转换为整数,这是完全不可能且受限制的。这就是您收到此错误的原因。

检查您的代码并更正它,它将正常工作

【讨论】:

    【解决方案6】:

    原因是你得到一个空字符串或一个字符串作为 int 的参数。检查它是否为空或包含字母字符。如果它包含字符,则只需忽略该部分。

    【讨论】:

    • 这看起来更像是一条评论。当您有足够的声誉时,您将能够对任何帖子发表评论。
    【解决方案7】:

    所以如果你有

    floatInString = '5.0'
    

    您可以使用floatInInt = int(float(floatInString)) 将其转换为int

    【讨论】:

      【解决方案8】:

      这条线有问题:

      while file_to_read != " ":
      

      这找不到空字符串。它找到一个由一个空格组成的字符串。想必这不是你要找的。

      听听其他人的建议。这不是非常惯用的python代码,如果你直接遍历文件会更清楚,但我认为这个问题也值得注意。

      【讨论】:

        【解决方案9】:

        请在一个简单的文件上测试这个功能(split())。我遇到了同样的问题,发现这是因为split() 没有正确写入(异常处理)。

        【讨论】:

          【解决方案10】:

          我最近遇到了一个案例,这些答案都不起作用。我遇到了 CSV 数据,其中有空字节与数据混合,并且这些空字节没有被剥离。因此,我的数字字符串在剥离后由如下字节组成:

          【解决方案11】:

          我对这个问题的简单解决方法是将我的代码包装在 if 语句中,利用空字符串 is not "truthy" 的事实:

          给定这两个输入中的任何一个:

          input_string = ""    # works with an empty string
          input_string = "25"  # or a number inside a string
          

          您可以使用此检查安全地处理空白字符串:

          if input_string:
             number = int(input_string)
          else:
             number = None # (or number = 0 if you prefer)
          
          print(number)
          

          【讨论】:

            【解决方案12】:
                readings = (infile.readline())
                print readings
                while readings != 0:
                    global count
                    readings = int(readings)
            

            那个代码有问题。 readings 是从文件中读取的新行 - 它是一个字符串。因此,您不应将其与 0 进行比较。此外,您不能只将其转换为整数,除非您是当然它确实是一个。例如,空行会在此处产生错误(您肯定已经发现)。

            为什么需要全局计数?这在 Python 中肯定是糟糕的设计。

            【讨论】:

              【解决方案13】:

              当您必须将空格分隔的整数映射到列表但使用.input() 逐行输入整数时,也会发生这种情况。 例如,我在 HackerRank Bon-Appetit 上解决了这个问题,编译时出现以下错误

              因此,不要逐行向程序提供输入,而是尝试使用map() 方法将空格分隔的整数映射到一个列表中。

              【讨论】:

                【解决方案14】:

                由于这条线,您的答案会引发错误

                readings = int(readings)
                
                1. 在这里,您尝试将字符串转换为非 base-10 的 int 类型。只有当它是 base-10 时,您才能将字符串转换为 int,否则它将抛出 ValueError,说明 int() 以 10 为底的无效文字。

                【讨论】:

                  【解决方案15】:

                  我正在创建一个读取 文件,如果文件的第一行 不是空白的,它读取接下来的四个 线。计算是在 这些行,然后下一行是 读。

                  像这样的东西应该可以工作:

                  for line in infile:
                      next_lines = []
                      if line.strip():
                          for i in xrange(4):
                              try:
                                  next_lines.append(infile.next())
                              except StopIteration:
                                  break
                      # Do your calculation with "4 lines" here
                  

                  【讨论】:

                    【解决方案16】:

                    如果上述所有解决方案都不适合您,另一个答案。

                    我原来的错误类似于 OP:ValueError: int() 以 10 为底的无效文字:'52,002'

                    然后我尝试了接受的答案并得到了这个错误:ValueError:无法将字符串转换为浮点数:'52,002'--这是我尝试 int(float(variable_name)) 的时候

                    我的解决方案是将字符串转换为浮点数并将其留在那里。我只需要检查字符串是否为数值,以便我可以正确处理它。

                    try: 
                       float(variable_name)
                    except ValueError:
                       print("The value you entered was not a number, please enter a different number")
                    

                    【讨论】:

                      【解决方案17】:

                      我在 Django 中遇到了这个错误——在我的模型中,我有一个 DateTimeField(),上面有一些保存的对象。 然后当我将字段更改为DateField()

                      解决这个;我只是编辑了我的数据库(db.sqlite3),因为我将日期值从这种格式2021-08-09 13:05:45 更改为这种2021-08-09,仅此而已。

                      【讨论】:

                        【解决方案18】:

                        这似乎读数有时是一个空字符串,显然会出现错误。 您可以在 while 循环之前添加一个额外的检查整数(读数)命令如:

                        while readings != 0 or readings != '':
                            readings = int(readings)
                        

                        【讨论】:

                          【解决方案19】:

                          尝试在 for 循环中为同一个文件对象使用 readlines() 时遇到了同样的问题...我怀疑是在 readline() 内为同一个文件对象触发 readling() 导致了这个错误。

                          最佳解决方案可以使用 seek(0) 重置文件指针或 通过设置一些标志来处理条件,然后通过检查设置条件为同一文件创建新对象....

                          【讨论】:

                            【解决方案20】:

                            我很难弄清楚真正的原因,当我们没有从文件中正确读取时就会发生这种情况。 您需要打开文件并使用 readlines() 方法读取,如下所示:

                            with open('/content/drive/pre-processed-users1.1.tsv') as f:
                                file=f.readlines()
                            

                            它更正了格式化的输出

                            【讨论】:

                              【解决方案21】:

                              我遇到了类似的错误,事实证明数据集有空白值,python 无法将其转换为整数。

                              【讨论】:

                              • 您能否通过一些示例详细说明 OP 如何解决它?
                              • 空白值表示空,可以转换为字符串浮点数。如果您尝试转换为 float 也会显示错误
                              猜你喜欢
                              • 2018-09-09
                              • 2020-01-04
                              • 2010-12-22
                              • 2011-07-07
                              • 2019-10-14
                              • 2013-05-07
                              相关资源
                              最近更新 更多