【问题标题】:ValueError Expected 2 Got 1 PythonValueError 预期 2 得到 1 个 Python
【发布时间】:2016-11-20 13:06:05
【问题描述】:

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

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(' ')这一行。我不确定这叫什么(复合分配?元组分配?),为什么它不起作用(我以前从未尝试过这种方式,但它似乎很合理),或者如何使它起作用。如果有人以这种方式阅读文件,可以对这种情况有所了解,我们将不胜感激。

【问题讨论】:

  • 文件中的一行没有空格。
  • 尝试在循环开始时添加print(line) 以查看失败的行。
  • 我怀疑“最后”行以换行符结尾。

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


【解决方案1】:

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

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

【讨论】:

  • 感谢您解决这种语法类型是什么以及它的作用的问题!作者认为这是不言而喻的。
【解决方案2】:

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


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

在循环的开头应该解决它。

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2022-08-07
    • 2018-05-13
    • 2022-08-24
    相关资源
    最近更新 更多