Python 2 - ValueError:没有足够的值来解包(预期 6,得到 1)

Posted

技术标签:

【中文标题】Python 2 - ValueError:没有足够的值来解包(预期 6,得到 1)【英文标题】:Python 2 - ValueError: not enough values to unpack (expected 6, got 1) 【发布时间】:2017-02-02 00:48:07 【问题描述】:

我不断收到此错误,我不知道如何解决它,我需要帮助。

ValueError: not enough values to unpack (expected 6, got 1)

这就是我加载的方式

with open('objs.pickle', "rb") as f:
    money, hunger, thirst, energy, wanted, gun = pickle.load(f)

这就是我的保存方式

with open('objs.pickle', 'ab') as f:  # Python 3: open(..., 'wb')
    pickle.dump([money, hunger, thirst, energy, gun, wanted], f)

【问题讨论】:

您在序列化数据时以ab 模式打开了文件。为什么?为什么要在 Python 3 上以不同的模式打开它?听起来您可能在此文件中有其他垃圾。 检查pickle.load(f) 返回的内容。它必须是单个元素。 它返回money变量 这个问题之前已经解决了。 ***.com/a/29559840/4399016 谢谢我认为它现在已经修复了 【参考方案1】:

pickle.load 只会加载它在文件中找到的第一个腌制对象。在您的情况下,这是一个具有两个以上键的字典,因此 x, y = pickle.load(...) 失败,因为它试图将字典的键解包为标识符 x 和 y。

with open("objs.pickle") as f:
    first_dict = pickle.load(f)  # file pointer is now at end of first object
    second_dict = pickle.load(f)  # read in second object

等等

如果你把这些词放在一个单独的对象中,你会更好,例如。一个元组并腌制那个单个对象。当您不知道文件中有多少腌制对象时,这会容易得多。

my_list = ['money', 'hunger', 'thirst', 'energy', 'wanted', 'gun']
tuple(my_list)

现在更容易腌制元组 my_list。

【讨论】:

TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“列表”

以上是关于Python 2 - ValueError:没有足够的值来解包(预期 6,得到 1)的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:没有足够的值来解包(预期为 2,得到 1)当试图在 python 中解包 dict 以使用 pandas 进行数据标记时

ValueError:pytorch 中的“str”python 维度太多

如何在没有字符串解析的情况下解析 Python 中的 ValueError?

Python ValueError 异常没有被正确捕获

python django ajax:ValueError:视图没有返回 HttpResponse 对象。它返回 None 而不是

ValueError 的 Python 断言