我有以下部分代码。当我给值"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
我不能同时在 x 和 y 中写"q"。
您的代码片段中断,因为您执行元组解包需要 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
如果你真的想使用元组,看看这篇文章。开箱时是否可以分配默认值?
如果输入字符串不包含','
则split(',')
返回一个包含单个元素的列表,这将导致x, y = []
返回上述错误。
你只需要稍微重新组织你的逻辑。测试是否已给出"q"退出字符串,如果有,则中断循环。否则,拆分字符串,并将数据插入字典。最好允许"q"和"Q"作为退出信号。从字典中存储的值中删除杂散的空格也是一个好主意。您无需担心键,因为转换字符串时int
会忽略前导和尾随空格。
下面是代码的清理版本。
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'}