拆分:值错误:需要超过 1 个值才能解压缩 python



我有以下部分代码。当我给值"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'}

最新更新