2016-11-20 47 views
0

我正在嘗試將以下數據讀入我的程序。ValueError預計2得到1 Python

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(' ')。我不確定這叫做什麼(複合賦值?元組賦值?),它爲什麼不起作用(我從來沒有嘗試過這種方式,但似乎是合理的),或者如何使它工作。如果有人以這種方式閱讀文件可以瞭解情況,那將不勝感激。

+3

文件的其中一行中沒有空格。 – TigerhawkT3

+2

嘗試在循環開始處添加'print(line)'來查看它在哪條線上失敗。 –

+1

我懷疑「最後一行」以換行符結束。 – TigerhawkT3

回答

2

這叫做拆包。當你有一個迭代器(列表,元組或者任何支持索引的東西)時,像x, y = point這樣的語法獲得point[0], point[1]元素並將它們分別分配給x, y。然而,如果沒有point[0]point[1]它會拋出一個異常

這是你的情況發生了什麼,很可能是因爲您的文件中的某些行丟失兩個值之間的空間,所以line.split(' ')回報的只有一件事

+0

感謝您解決什麼類型的語法是什麼,它做了什麼!作者認爲這是不言而喻的。 – Ryan

1

您可能會在文件末尾遇到一個空白的new line,該文件在被分割時僅給出一個項目列表([''])。 (另外,按空格分隔不需要參數,這是默認設置)。


if len(line.split()) < 2: continue 

在循環的開始應該解決這個問題。

+0

工作就像一個魅力!非常感謝! – Ryan

相關問題