[英]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.