繁体   English   中英

列表理解ValueError:太多值无法解包

[英]List comprehension ValueError: too many values to unpack

我有一个生成2项列表的过程,如[datestamp, timestamp]

如果我将其放入列表理解为:

[(ds,ts) for ds,ts in process]

我期望的结果是:

[(ds,ts), (ds,ts), (ds,ts)]

我得到的是ValueError: too many values to unpack

这是因为for循环迭代到该进程返回的列表中:

for ds,ts in [datestamp, timestamp]

不分配ds=datestampts=timestamp ,而是遍历每个字母...如果这样做有效,它将给出(d,t)(a,i)(t,m)(e,e)

所以我知道出了什么问题...但是不知道如何完成这项工作! (是的,这确实很愚蠢……我知道答案会很简单

这有效:

process = [[1,2],[3,4],[5,6]]
a = []
for ds, ts in process:
    print(ds, ts)
    a.append((ds, ts))

以及

z = [(ds, ts) for (ds, ts) in process]
q = [(ds, ts) for ds, ts in process]

如果收到'ValueError: too many values to unpack'异常,则流程必须生成具有两个以上项目的可迭代对象。

解开列表理解并处理异常 -在except套件中打印相关内容以查看可能出了什么问题,然后向后处理源代码。 就像是

process = [[1,2],[3,4],[5,6], [7,8,9]]

a = []
try:
    for thing in process:
        ds, ts = thing
        a.append((ds, ts))
except ValueError as e:
    print(e, '\t', thing)

您需要调试。 您的列表中一定有一些项目不是您期望的成对的。

找到它们的一种方法是:

problems = [(idx, value) for idx,value in enumerate(process) if len(value)!=2]

这将为您提供问题索引列表以及列表中的项目。

如果出现错误(例如,由于value对象没有__len__方法而导致TypeError ,则将其更改为:

problems = [(idx, value) for idx,value in enumerate(process) if not hasattr(value, '__len__')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM