如何修复 ValueError:在 Python 中要解压的值太多(预期为 3)?

我有一个名为 的数据集records,数据集样本如下所示:


user_id movie_id genre

1       1001     action

2       1002     drama

3       1003     comedy

4       1004     drama

...     ...      ...    

records我想通过以下方式迭代:


for user, movie, genre in records:

    print(user, movie, genre)

它首先打印一些行,然后显示此错误:


44892 113769 comedy

44892 113769 drama

...  

------------------------------------------------ 

ValueError Traceback (most recent call last) in 

----> 1 for user, movie, genre in records:

      2     print(user, movie, genre)


ValueError: too many values to unpack (expected 3)

出了什么问题以及如何解决?


FFIVE
浏览 132回答 5
5回答

神不在的星期二

您可以使用它来丢弃返回的任何额外数据for user, movie, genre,*_ in records:     print(user, movie, genre)

元芳怎么了

我想将其添加为评论,但我无法添加代码片段。因此添加为答案for item in records:    print(item)    user, movie, genre=item您将在代码通过 ValueError 中断之前打印记录的值。一旦您向我们展示了故障发生在什么记录上,就会更容易获得解决方案笔记。如果您想忽略与预期模式不匹配的记录,您可以这样做for item in records:    try:        user, movie, genre=item    except ValueError:        print("Failed at %s" % repr(item))    else:        print(item)

吃鸡游戏

您的数据集是否作为熊猫数据框加载?如果是的话,你可以做这样的事情cols = ['user_id', 'movie_id', 'genre']# Assuming df is the data frame you havefor ind in df.index:  user_id, movie_id, genre = df.loc[ind, cols]  print(user_id, movie_id, genre)如果您在数据集中没有列名,也许自己添加它们是一个有效的步骤?

一只名叫tom的猫

请检查您的数据集。可能有一些行的数据由制表符分隔,并且它正在将该行视为新列。因为这个错误被抛出。例子 :userid 电影类型44892 113769 恐怖喜剧在这里,如果您选择分隔符作为制表符/空格,那么它会将恐怖和喜剧视为不同的列。或者你可以参考: “解包的值太多”异常

桃花长相依

您的变量名称不同:您在数据集中称它们user_id为movie_id、 和genre,但随后又将它们称为user和movie。尝试将其更改为:for user_id, movie_id, genre in records:    print(user_id, movie_id, genre)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python