[英]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=datestamp
, ts=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.