如何处理错误,没有足够的值来解压 for 循环

how to handle error not enough values to unpack in for loop

在下面的代码中,用户将输入单个整数 N 作为他接下来应该输入的对数 b。假设输入的列表是 b=[('r', 1),('a', 1),('a', 2),('a', 1),('r', 1),('r', 2)],输出应该是 B=[1]。用户将输入如下数据:

6
r 1
a 1
a 2
a 1
r 1
r 2

引发错误的代码:'not enough values to unpack (expected 2, got 1)'

N = int(input())
B=[]
for i in range(N):
    b = (input().split())
for (action, value) in b:
  if action == 'a':
    B.append(value)
  elif action == 'r':
    try:
      B.remove(value)
    except ValueError:
      pass

您正在尝试迭代一组值,将每个项目解包到多个变量中。为此,您需要有一个二维数组(第一维用于遍历数组,第二维用于解压值)。

您正在尝试循环访问用户输入的最后一个值。在您的情况下,它是 r 2,它被拆分为 ['r', '2']。在第一次迭代中,您试图将 'r' 解包为 2 个变量,这是无法完成的。

相反,您应该在用户输入值时将其解包。

N = int(input())
B=[]
for i in range(N):
  b = (input().split())
  action, value = b
  if action == 'a':
    B.append(value)
  elif action == 'r':
    try:
      B.remove(value)
    except ValueError:
      pass

或者使用数组存储输入:

N = int(input())
B=[]

inputs = []
for i in range(N):
  b = (input().split())
  inputs.append(b)

for action, value in inputs:
  if action == 'a':
    B.append(value)
  elif action == 'r':
    try:
      B.remove(value)
    except ValueError:
      pass

如果您想创建列表,您应该首先将用户输入作为元组附加到列表中 'b',然后遍历它并像这样处理操作:

N = int(input())
B=[]
b = []
for i in range(N):
    user_input = input().split() # this returns a list
    b.append(tuple(user_input)) # append user input as a tuple

# Handle actions here
for (action, value) in b:
  if action == 'a':
    B.append(value)
  elif action == 'r':
    try:
      B.remove(value)
    except ValueError:
      pass