Python ValueError:解包的值太多,解决方案?

Posted

技术标签:

【中文标题】Python ValueError:解包的值太多,解决方案?【英文标题】:Python ValueError : too many values to unpack, solution? 【发布时间】:2013-11-12 18:37:54 【问题描述】:

我收到这个错误,我不知道它是什么意思,我可以让程序从那里打印文件值,但它只是一个很长的不连贯现在我试图让它在有组织的庄园中打印它,这就是问题出现了。

import os 
def listfiles (path):
    files = []
    for dirName, subdirList, fileList in os.walk(path):
        dir = dirName.replace(path, '')
        for fname in fileList:
            files.append(os.path.join(dir, fname))
    return files

a = input('Enter a primary file path: ')
b = input('Enter a secondary file path: ')

x = listfiles(a)
y = llistfiles(b)

files_only_x = set(x) - set (y)
files_only_y = set(y) - set (x)

下一行代码是 python 说错误的地方

for dirName, subdirList, fileList in files_only_x:
    print ('Directory: %s' % dirName)
    for fname in fileList:
        print ('\%s' % fname)

【问题讨论】:

【参考方案1】:

您的files_only_x 是一组单个值;您的 listfiles() 函数返回一个字符串列表,而不是具有 3 个值的元组:

for fname in files_only_x:
    print ('\\%s' % fname)

【讨论】:

【参考方案2】:

您将 files 构建为字符串列表,因此您的第二个代码块中的循环是错误的,因为它表明 files 是 3 值元组列表。

【讨论】:

【参考方案3】:

看数据流:

您使用路径调用listfiles()。它在列表中收集该路径下的所有文件。

(顺便说一句,恕我直言 dir = dirName.replace(path, '') 是危险的。如果 pathlib/ 并且您遇到子路径 lib/misc/collected/lib/whatever 会发生什么?虽然这条路径男性没有多大意义,但它可能已被创建.. .)

您从listfiles() 返回此列表,然后将它们转换为集合。

如果您尝试对这些集合进行迭代,则每个迭代步骤都会获得一条路径。

【讨论】:

以上是关于Python ValueError:解包的值太多,解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

Python ValueError:解包的值太多,解决方案?

python ValueError:在元组中解包的值太多

ValueError:使用 Sage 绘图时“解包的值太多”

Pandas DataFrame apply() ValueError:要解包的值太多(预期为 2)

Makemigrations ValueError:解包的值太多

Tensorboard - ValueError:解包的值太多(预期 2)