Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ValueError应为2得到1 Python_Python_Python 3.x_File Io_Stdin - Fatal编程技术网

ValueError应为2得到1 Python

ValueError应为2得到1 Python,python,python-3.x,file-io,stdin,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.readlin

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

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(“”)
。我不知道这叫什么(复合赋值?元组赋值?),为什么它不起作用(我以前从未尝试过这种方法,但它似乎是合理的),或者如何使它起作用。如果任何以这种方式阅读文件的人都能了解情况,我们将不胜感激。

您可能会在文件末尾遇到一个空白的
新行
,该行在拆分时只给出一个项目列表(
[']
)。(另外,按空格分割不需要参数,这是默认值)


if len(line.split())<2:继续

在循环开始时,应该解决这个问题。

您可能在文件末尾遇到一个空白的
新行
,该行在拆分时只给出一个项目列表(
['']
)。(另外,按空格分割不需要参数,这是默认值)


if len(line.split())<2:继续
在循环开始时,应解决此问题。

这称为解包。当您有一个iterable(列表、元组或任何支持索引的东西)时,类似
x,y=point
的语法会获取
点[0],点[1]
元素,并分别将它们分配给
x,y
。但是,如果没有
点[0]
点[1]
它将抛出异常

这就是您的情况,很可能是因为文件中的某些行在两个值之间缺少空格,因此
line.split(“”)
只返回一个值,这称为解包。当您有一个iterable(列表、元组或任何支持索引的东西)时,类似
x,y=point
的语法会获取
点[0],点[1]
元素,并分别将它们分配给
x,y
。但是,如果没有
点[0]
点[1]
它将抛出异常


这就是您的情况,很可能是因为文件中的某一行在两个值之间缺少空格,所以
line.split(“”)
只返回一件事文件中的某一行中没有空格。请尝试在循环的开始处添加
print(line)
,以查看哪一行失败。我怀疑“last”行以换行符结尾。文件中的一行中没有空格。请尝试在循环开始处添加
print(line)
,以查看它在哪一行上失败。我怀疑“last”行“行以换行符结尾。感谢您解决了这种语法类型是什么及其作用的问题!作者们认为这是不言而喻的。感谢您解决了这种语法类型是什么及其作用的问题!作者认为这是不言而喻的。
if len(line.split()) < 2: continue