ValueError:基数为10的int()的无效文字:''

时间:2009-12-03 17:34:20

标签: python

我正在创建一个读取文件的程序,如果该文件的第一行不是空白,则会读取接下来的四行。在这些行上执行计算,然后读取下一行。如果该行不为空,则继续。但是,我收到了这个错误:

ValueError: invalid literal for int() with base 10: ''.

它正在读取第一行但不能将其转换为整数。

我该怎么做才能解决这个问题?

代码:

file_to_read = raw_input("Enter file name of tests (empty string to end program):")
try:
    infile = open(file_to_read, 'r')
    while file_to_read != " ":
        file_to_write = raw_input("Enter output file name (.csv will be appended to it):")
        file_to_write = file_to_write + ".csv"
        outfile = open(file_to_write, "w")
        readings = (infile.readline())
        print readings
        while readings != 0:
            global count
            readings = int(readings)
            minimum = (infile.readline())
            maximum = (infile.readline())

18 个答案:

答案 0 :(得分:237)

仅供记录:

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

让我来这里......

>>> float('55063.000000')
55063.0

必须使用!

答案 1 :(得分:50)

迭代文件并转换为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

答案 2 :(得分:36)

以下内容在python中完全可以接受:

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

但如果将 float 的字符串表示传递给ValueError,或者除了整数(包括空字符串)之外的任何字符串表示,则会得到int。如果你确实想要将float的字符串表示传递给int,正如@katyhuff指出的那样,你可以先转换为float,然后转换为整数:

>>> 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

答案 3 :(得分:9)

原因是您将一个空字符串或字符串作为参数添加到int中 检查它之前是空的还是包含字母字符,如果它包含而不是忽略该部分。

答案 4 :(得分:4)

您收到此错误的原因是您正在尝试将空格字符转换为整数,这是完全不可能和受限制的。这就是您收到此错误的原因。enter image description here

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

答案 5 :(得分:3)

你对这一行有疑问:

while file_to_read != " ":

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

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

答案 6 :(得分:3)

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

答案 7 :(得分:1)

    readings = (infile.readline())
    print readings
    while readings != 0:
        global count
        readings = int(readings)

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

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

答案 8 :(得分:1)

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

\x00\x31\x00\x0d\x00

对此,我做了:

countStr = fields[3].replace('\x00', '').strip()
count = int(countStr)

...其中,字段是由分割线产生的csv值的列表。

答案 9 :(得分:1)

如果有

floatInString = '5.0'

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

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我得到类似的错误,结果是数据集有空白值,python无法转换为整数。

答案 13 :(得分:0)

  

我正在创建一个读取的程序   文件和文件的第一行   不是空白,它读取下四个   线。进行计算   那些线然后下一行是   读取。

这样的事情应该有效:

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

答案 14 :(得分:0)

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

while readings != 0 | readings != '':
    global count
    readings = int(readings)

答案 15 :(得分:0)

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

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

它纠正格式输出

答案 16 :(得分:0)

由于此行,您的答案抛出错误

readings = int(readings)
  1. 您在这里尝试将字符串转换为非基数为10的int类型。您只能将字符串转换为以10为底的整数,否则会引发ValueError,并指出以10为底的int()的无效文字。

答案 17 :(得分:0)

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

我原来的错误类似于 OP:ValueError: invalid literal for int() with base 10: '52,002'

然后我尝试了接受的答案并得到了这个错误:ValueError: could not convert string to float: '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")