pickle 加载错误“__init__() 恰好需要 2 个参数(给定 1 个)”

2024-01-19

我的问题是自定义类已使用 pickle.dump 保存,因为这些文件已保存,自定义类已更改,现在当我使用 pickle.load 时出现此错误。是不是保存的文件有问题?

错误:

File "/cprprod/extern/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/cprprod/extern/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
file "/cprprod/extern/lib/python2.7/pickle.py", line 1070, in load_inst
self._instantiate(klass, self.marker())
File "/cprprod/extern/lib/python2.7/pickle.py", line 1060, in _instantiate
value = klass(*args)

我可以做些什么来加载文件吗?

代码

file = open(filename,'rb')
obj = pickle.load(file)

会给我错误。


这是一些可以重现错误的最小代码:

import pickle

class foo:
    def __init__(self,a):
        self.a = a

    def __str__(self):
        return str(self.a)

obj = foo(1)

with open('junk','wb') as f:
    pickle.dump(obj,f)

class foo:
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def __str__(self):
        return '%s %s'%(self.a,self.b)

    def __getinitargs__(self):
        return (self.a,self.b)

with open('junk','rb') as f:
    obj = pickle.load(f)
    print str(obj)

鉴于我在问题中代表您发布的人为代码,我们可以“修复”此错误:

with open('junk','rb') as f:
    try:
        obj = pickle.load(f)
    except Exception as e:
        print e
        position = f.tell()
        a = foo.__getinitargs__
        del foo.__getinitargs__
        f.seek(position)
        obj = pickle.load(f)
        foo.__getinitargs__ = a

    print str(obj)

现在我们看到该实例已被 unpickled 并且不再具有属性b.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pickle 加载错误“__init__() 恰好需要 2 个参数(给定 1 个)” 的相关文章

  • Python 和 Numpy 是 nan 和 set

    我在使用 Python 的 Numpy set 和 NaN 非数字 时遇到了不可预测的行为 gt gt gt set np float64 nan np float64 nan set nan nan gt gt gt set np flo
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • 使用 pandas.date_range() 生成多个日期时间,每周两个日期

    我在用着pd date range start date end date freq W MON 每周一生成每周频率日期时间start date 2017 01 01 and end date 2017 12 31 这意味着每月大约生成 4
  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • 定义Python源代码编码的正确方法

    PEP 263 http www python org dev peps pep 0263 定义如何声明Python源代码编码 通常 Python 文件的前两行应以以下内容开头 usr bin python coding
  • 如何在python中附加两个字节?

    说你有b x04 and b x00 你如何将它们组合起来b x0400 使用Python 3 gt gt gt a b x04 gt gt gt b b x00 gt gt gt a b b x04 x00
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 是否有一个包可以维护所有带有符号的货币列表?

    是否有一个 python 包提供所有 或相当完整 货币的列表与符号 如美元的 有优秀的pycountry 贪财的 https github com limist py moneyed and ccy http code google com
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • 为什么在Python解释器中输入_会返回True? [复制]

    这个问题在这里已经有答案了 我的翻译行为非常奇怪 gt gt gt True gt gt gt type True
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • 使用 paramiko 运行 Sudo 命令

    我正在尝试执行sudo使用 python paramiko 在远程计算机上运行命令 我尝试了这段代码 import paramiko ssh paramiko SSHClient ssh set missing host key polic

随机推荐

  • 如何对 CopyOnWriteArrayList 进行排序

    我想排序CopyOnWriteArrayList 但是当我尝试运行以下代码时 它正在投掷unsorted operation exception public class CopyOnWriteArrayListExample public
  • PHP 查找字符串中所有出现的子字符串

    我需要解析 HTML 文档并查找所有出现的字符串asdf in it 我目前已将 HTML 加载到字符串变量中 我只想要字符位置 这样我就可以循环列表以在字符串后面返回一些数据 The strpos函数仅返回first发生 回国怎么样all
  • 如何检测向量中的空值

    检测向量中的空值的最佳方法是什么 如果我有下面的向量并且想知道第四个位置为空 我该怎么做 vx lt c 1 2 3 NULL 5 is null 仅返回FALSE is null vx 1 FALSE 我想得到 FALSE FALSE F
  • 游戏中心组

    我有一款带有 Game Center 排行榜的 iOS 游戏 我几个月前发布了这款游戏 现在正在开发 OSX 版本 我想为两个版本的游戏使用相同的排行榜 这意味着我需要创建一个 Game Center 组 问题是 当您将排行榜 ID 移动到
  • 判断Android应用是否是第一次使用

    我目前正在开发一个 Android 应用程序 我需要在应用程序第一次启动时做一些事情 即代码仅在程序第一次启动时运行 您可以使用共享首选项以确定这是否是应用程序的 第一次 启动 只需使用一个布尔变量 my first time 并将其值更改
  • 流星js如何从服务器将文件写入磁盘

    我正在编写一个流星包 myPackage 它需要使用 Npm FileSystem 和 Pah 模块将文件写入磁盘 该文件最终应位于 example app packages myPackage auto generated myFile
  • 打印数组显示错误的输出

    这段代码有什么问题 我得到了错误的输出 我不知道出了什么问题 希望您能帮助我 public class Main public static void main String args int data 11 22 33 55 22 88
  • 正则表达式 匹配正则表达式

    是否可以写一个与正则表达式匹配的正则表达式 有人有例子吗 如果存在一些理论上的障碍 是否有人知道至少可以匹配最常见的正则表达式模式的正则表达式 正则表达式不是正则语言 因此不能用正则表达式来描述 Update 更有用的实用答案 您无法使用任
  • 无法绑定到“数据”,因为它不是“画布”的已知属性

    我正在尝试使用 ng2 charts 并遇到错误 提示我使用的元素不正确 我在这个网站上尝试了一些答案 但没有成功 NG2 Charts 无法绑定到 数据集 因为它不是 画布 的已知属性 https stackoverflow com qu
  • 无法在 elastic beanstalk cli 中查看日志

    我想在命令行中查看弹性 beanstalk 环境的日志 为此我正在执行以下操作 eb logs cloudwatch logs enable cloudwatch log source instance Humboialpha2021 en
  • TypeError:无法在“WebAssembly”上执行“编译”:响应 MIME 类型不正确。预期的“应用程序/wasm”

    我正在尝试使用 Chrome 上的 fetch api 加载 wasm 文件 并使用 express 提供 html 文件 但 chrome 不允许我加载该文件 未捕获 承诺中 类型错误 无法在 WebAssembly 上执行 编译 响应M
  • Android 时区 土耳其 GMT

    2016 年 土耳其政府决定保留 GMT 3 时区以节省夏令时 但在 Android 上 Calendar calendar Calendar getInstance TimeZone tz TimeZone getTimeZone UTC
  • C++ 程序没有输出

    首先 很抱歉 如果这是错误的类别 因为我不确定这个问题的原因是什么 出于教育目的 我创建了一个小型 Hello World 应用程序 include
  • 当指令长度可变时的指令解码

    以下是一些指令及其对应的编码 55 push ebp 89 e5 mov esp ebp 83 ec 18 sub 0x18 esp a1 0c 9f 04 08 mov 0x8049f0c eax 85 c0 test eax eax 7
  • 如何在 Python 中为 Discord 服务器创建只能使用一次的特定数量的邀请链接

    我是使用 Discord 服务器的新手 我想创建一个私人 Discord 服务器 只有我邀请的用户才能加入 我读到了一些可以实现这一目标的方法 但它们都不是我真正想要的 我正在考虑创建一个 Discord 应用程序 该应用程序生成特定数量的
  • 使用 Jenkins 在管道中触发器中的时区

    我想使用管道通过触发器设置时区 我可以在作业配置中手动设置构建触发器 check Build periodically 日程 0 0 TZ Asia Seoul 这有效 但在管道中 以下语法有效 pipeline triggers cron
  • Twitter bootstrap select readonly 仍然可以更改选项

    我有一个引导选择readonly true 但我仍然可以更改所选选项 我需要disabled true 行为 但是当我使用它时 选择不会提交 我需要两者的组合 所选选项无法更改 但必须提交选择 我可以使用隐藏字段 但我希望有一个更简单的解决
  • 关于 getView() 的问题

    任何人都可以解释以下代码的作用吗 public View getView int position View convertView ViewGroup parent TODO Auto generated method stub View
  • 如何在节点中将 Hex 转换为 Uint8Array?

    我可以使用下面的代码将 Uint8Array 转换为十六进制 var bkh publicKey new Uint8Array 91 221 234 40 144 246 91 187 154 76 60 178 204 81 35 195
  • pickle 加载错误“__init__() 恰好需要 2 个参数(给定 1 个)”

    我的问题是自定义类已使用 pickle dump 保存 因为这些文件已保存 自定义类已更改 现在当我使用 pickle load 时出现此错误 是不是保存的文件有问题 错误 File cprprod extern lib python2 7