我有以下部分代码。当我给出价值' 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中。
答案 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'}