ValueError:要解压的值太多 - 是否可以忽略一个值?

时间:2016-07-28 12:44:58

标签: python

以下行返回错误:

self.m, self.userCodeToUserNameList, self.itemsList, self.userToKeyHash, self.fileToKeyHash = readUserFileMatrixFromFile(x,True)

该函数实际返回6个值。但在这种情况下,最后一个是无用的(无)。所以我只想存储5个。

是否可以忽略最后一个值?

4 个答案:

答案 0 :(得分:11)

您可以使用Python 3中的*rest

>>> x, y, z, *rest = 1, 2, 3, 4, 5, 6, 7
>>> x
1
>>> y
2
>>> rest
[4, 5, 6, 7]

通过这种方式,您始终可以确保不会遇到解包问题。

答案 1 :(得分:3)

使用_来表示不需要的变量很常见。

a, b, c, d, e, _ = my_func_that_gives_6_values()

在迭代一定次数时也经常使用它。

[random.random() for _ in range(10)]  # gives 10 random values

Python 3还为赋值引入了*,类似于*args如何获取任意数量的参数。要忽略任意数量的参数,只需将它们分配给*_

a, b, c, d, e, *_ = my_func_that_gives_5_or_more_values()

这可以在作业的任何时候使用;你可以获取第一个和最后一个值并忽略中间的填充:

>>> a, b, c, *_, x, y, z = range(10)
>>> print(a, b, c, '...', x, y, z)
0 1 2 ... 7 8 9

答案 2 :(得分:0)

将最后一个切片:

self.m,  self.userCodeToUserNameList, \
self.itemsList, self.userToKeyHash, \
self.fileToKeyHash = readUserFileMatrixFromFile(x,True)[:-1]
TigerhawkT3's comment之后

编辑

请注意,仅当返回对象支持切片时才有效。

答案 3 :(得分:-1)

只需使用一次性变量' _'

  self.m, 
  self.userCodeToUserNameList, 
  self.itemsList, 
  self.userToKeyHash, 
  self.fileToKeyHash, 
  _ = readUserFileMatrixFromFile(x,True)

这里' _'被故意忽略。