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

我正在创build一个读取文件的程序,如果文件的第一行不是空白,它将读取下面的四行。 在这些行上进行计算,然后读取下一行。 如果该行不为空,则继续。 但是,我得到这个错误:

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

只是为了logging:

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

必须使用!

遍历文件并转换为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不能将空string转换为整数。 在这种情况下,您需要在转换之前检查string的内容,或者除了一个错误:

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

原因是你得到一个空的string或string作为一个参数到int检查之前它是空的或它包含字母字符或如果它包含而不是简单地忽略该部分。

你有这个问题:

 while file_to_read != " ": 

这没有find一个空string。 它find一个由一个空格组成的string。 大概这不是你在找什么。

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

请在一个简单的文件上testing这个函数( split() )。 我面临同样的问题,并发现这是因为split()写得不好(exception处理)。

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

这个代码有问题。 readings是从文件读取的新行 – 这是一个string。 因此,你不应该把它与0进行比较。而且,除非你确定它是一个整数,否则你不能把它转换成一个整数。 例如,空行会在这里产生错误(正如你已经发现的那样)。

为什么你需要全球的数字? 这在Python中是最糟糕的devise。

我得到类似的错误,事实certificate,该数据集有python无法转换为整数空值。

我正在创build一个读取文件的程序,如果文件的第一行不是空白,它将读取下面的四行。 在这些行上进行计算,然后读取下一行。

像这样的东西应该工作:

 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