簡體   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