【问题标题】:Python read pickle protocol 4 error: STACK_GLOBAL requires strPython 读取 pickle 协议 4 错误:STACK_GLOBAL 需要 str
【发布时间】:2019-11-20 08:23:11
【问题描述】:

在 Python 3.7.5、ubuntu 18.04 中,pickle 读取会报错,

泡菜版本 4

示例代码:

import pickle as pkl
file = open("sample.pkl", "rb")
data = pkl.load(file)

错误:

UnpicklingError Traceback(最近调用 最后的) 在
----> 1 个数据 = pickle.load(file) UnpicklingError: STACK_GLOBAL 需要 str

从同一个文件对象中读取可以解决问题。

使用 pandas 阅读也会出现同样的问题

【问题讨论】:

  • Elbek 已正确指出他们收到的错误消息可能与已知问题有关。但是,当尝试加载根本不是 pickle 文件的文件时,也会出现相同的错误消息。例如,如果(就像我今天发生的那样),一个人不小心尝试通过pickle.load 加载一个包含 numpy 数组的文件,一个人收到与 Elbek 相同的错误消息。
  • 我同意@AliceSchwarze。最可能的解释是您加载了使用 np.save 保存的 numpy 数组。
  • Numpy 加载/保存函数默认依赖pickle。

标签: python pandas pickle


【解决方案1】:

我也有这个错误原来我是用pickle打开一个numpy文件。 ;)

【讨论】:

    【解决方案2】:

    原来这是已知问题。有问题页面 github

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,只是在文件名末尾添加了pckl

      【讨论】:

        【解决方案4】:

        我的问题是我试图在不同的 python 环境中腌制和取消腌制 - 注意确保你的腌制版本匹配!

        【讨论】:

          猜你喜欢
          • 2016-11-22
          • 2020-11-29
          • 2014-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多