ValueError预期2获得1个Python

时间:2016-11-20 13:06:05

标签: python python-3.x file-io stdin

我正在尝试将以下数据读入我的程序。

Distance (m) Mass (kg) 
0.0865 0.1
0.1015 0.15
0.4416 0.9
0.4304 0.95
0.437 1.0

我正在使用以下代码,这本书直接出版。

def getData(fileName):
    dataFile = open(fileName, 'r') 
    distances = []
    masses = []
    discardHeader = dataFile.readline() 
    for line in dataFile:
        d, m = line.split(' ')
        distances.append(float(d))
        masses.append(float(m))
    dataFile.close()
    return (masses, distances)

代码一致返回:

ValueError: not enough values to unpack (expected 2, got 1)

我已经查看过此处和网络上的其他ValueError条目,这些条目与将空格分隔的数据读入程序有关,但尚未找到具有实质上类似问题的条目。

我猜想问题是行d, m = line.split(' ')。我不确定这叫做什么(复合赋值?元组赋值?),为什么它不起作用(我以前从未尝试过这种方式,但这似乎是合理的),或者如何使它工作。如果任何以这种方式接近阅读文件的人都可以了解情况,我们将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可能在文件末尾遇到空白new line,在分割时只提供了一个项目列表([''])。 (另外,按空格分割不需要参数,这是默认值。)

if len(line.split()) < 2: continue
循环开始时的

应解决它。

答案 1 :(得分:2)

这称为解包。如果您有可迭代(列表,元组或任何支持索引的内容),则x, y = point等语法会获取point[0], point[1]元素,并将它们分别分配给x, y。但是,如果没有point[0]point[1],则会抛出异常

在你的情况下会发生这种情况,很可能是因为你文件中的某些行缺少两个值之间的空格,所以line.split(' ')只返回一件事