拆分:ValueError:解压缩python需要多于1个值

时间:2017-11-08 12:33:31

标签: python split user-input

我有以下部分代码。当我给出价值' q'作为x的输入,我想停止程序的执行。

di={}
while True:
 x,y=raw_input('Key, Value: ').split(',')
 a=int(x)
 di[a]=y
 if (x=='q'):
  break
 else
  continue

我收到一条错误消息,输入命令无法解压缩,因为我只提供了一个参数。有什么帮助吗?

Key, Value: 454,fds
Key, Value: 239,ada
Key, Value: q
Traceback (most recent call last);
File "tmp.py", line 3, in <module>
x,y=raw_input('Key,Value: ').split(',')
ValueError: need more than 1 value to unpack

我不能写&#39; q&#39;在x和y中。

3 个答案:

答案 0 :(得分:1)

您的代码段中断了,因为您执行了需要2个值的解包。即使您可以使用q,q,您的代码也会中断,因为您将x分配给int,对于q的情况,它将抛出ValueError。

您可以使用可以预先检查的列表,而不是使用元组赋值。

while True:
 alist =raw_input('Key, Value: ').split(',')

 if len(alist) is 1 or alist[0] is 'q':
    break

 x = int(alist[0])
 y = alist[1]
 di[x]=y

如果你真的想用元组看一下这篇文章。 Is it possible to assign a default value when unpacking?

答案 1 :(得分:0)

如果输入字符串不包含',',则split(',')将返回包含单个元素的列表,这将导致x, y = []返回上述错误。

答案 2 :(得分:0)

您只需稍微重新组织您的逻辑。测试是否已经给出'q'退出字符串,如果有,则退出循环。否则,拆分字符串,并将数据插入字典。允许退出信号的“q”和“Q”都是个好主意。从你在dict中存储的值中去除流浪空白也是一个好主意。你不需要为密钥担心,因为int会忽略领先&amp;转换字符串时尾随空格。

以下是代码的清理版本。

di = {}
print 'Enter q to quit'
while True:
    s = raw_input('Key, Value: ')
    if s.lower() == 'q':
        break
    x, y = s.split(',')
    di[int(x)] = y.strip()

print di

<强>演示

Enter q to quit
Key, Value: 1, a
Key, Value: 2 , b
Key, Value:  3 , c
Key, Value: q
{1: 'a', 2: 'b', 3: 'c'}