Python ValueError:解压缩的值太多(预期2)

时间:2017-05-29 11:30:17

标签: python

输入

 2 4
 1 2 3 4
 1 0
 2 1
 2 3  

我需要从第三行到结尾提取数字对(第三行只有2个数字)
这是我的功能

def read_nodes():
    n, r = map(int, input().split())
    n_list = []

    for i in range(2 , n):
        n1, n2 = map(int, input().split())
        n_list.append([n1, n2])
    return n_list
print(read_nodes())

我除了[[1,0],[2,1],[2,3]] 但是说 ValueError: too many values to unpack (expected 2)

2 个答案:

答案 0 :(得分:2)

有两个地方可能发生这种情况

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Platform\DiagnosticsHub\WebViews

n, r = map(int, input().split())

在这两种情况下,您都假设输入只包含两个值。如果有3个或20个怎么办?尝试像

这样的东西
n1, n2 = map(int, input().split())

或者将整个事物包装在try / except中,以便干净地处理太多的值。

你的for循环可能只是

for x in map(int, input().split()):
    # code here

答案 1 :(得分:2)

@ e4c5已经解释了为什么错误发生得很好,所以我将跳过那部分。

如果您使用的是Python 3并且只对前两个值感兴趣,那么这是一个使用Extended Iterable Unpacking的好机会。以下是一些简短的演示:

>>> n1, n2, *other = map(int, input().split())
1 2 3 4
>>> n1
1
>>> n2
2
>>> other
[3, 4]

other是"通配符"捕获剩余值的名称。 您可以通过检查other

的真实性来检查用户是否提供了两个值
>>> n1, n2, *other = map(int, input().split())
1 2
>>> if not other: print('exactly two values')
... 
exactly two values

请注意,如果用户提供少于两个数字,此方法仍会抛出ValueError,因为我们需要从列表input().split()中解压缩至少两个以便分配名称{{1} }和n1