python pickle.dumps 断言错误

2023-12-09

我正在尝试腌制一个包含另一个实例的两个列表的类实例。两个列表中的实例具有引用彼此实例的属性。这是课程。

import pickle
from copy import copy

class Graph:
    def __init__(self):
        self.vertices = {}
        self.edges = set()
    def __repr__(self):
        return "\n".join(map(str, sorted(self.vertices, key=lambda v:v.id)))

class Edge:
    def __init__(self, vfrom, vto):
        self.vfrom = vfrom
        self.vto = vto
    def __hash__(self):
        return hash((self.vto, self.vfrom))
    def __repr__(self):
        return str(self.vto.id)
    def __getstate__(self):
        vfrom = copy(self.vfrom)
        vfrom.del_outgoing(self)
        vto = copy(self.vto)
        vto.del_incoming(self)
        self.__dict__.update({"vfrom":vfrom, "vto":vto, })
        return self.__dict__
    def __setstate__(self, state):
        self.__dict__.update(state)
        self.__dict__["vfrom"].add_outgoing(self)
        self.__dict__["vto"].add_incoming(self)

class Vertex:
    def __init__(self, id):
        self.id = id
        self.incoming = set()
        self.outgoing = set()
    def __repr__(self):
        return "Vertex %d -> %s"%(self.id, ", ".join(map(str, self.outgoing)))
    def __hash__(self):
        return hash(self.id)
    def add_incoming(self, edge):
        if not edge in self.incoming:
            self.incoming.add(edge)
    def add_outgoing(self, edge):
        if not edge in self.outgoing:
            self.outgoing.add(edge)
    def del_incoming(self, edge):
        self.incoming.discard(edge)
    def del_outgoing(self, edge):
        self.outgoing.discard(edge)

当我腌制一个简单的图表时,出现断言错误,如下所示。

>>> v0 = Vertex(0)
>>> v1 = Vertex(1)
>>> e0to1 = Edge(v0, v1)
>>> v0.add_outgoing(e0to1)
>>> v1.add_incoming(e0to1)
>>> g = Graph()
>>> g.vertices[v0] = v0
>>> g.vertices[v1] = v1
>>> g.edges.add(e0to1)
>>> g.edges.add(e0to1)
>>> v2 = Vertex(2)
>>> e0to2 = Edge(v0, v2)
>>> v0.add_outgoing(e0to2)
>>> v2.add_incoming(e0to2)
>>> g.vertices[v2] = v2
>>> g.edges.add(e0to2)
>>> 
>>> print g
Vertex 0 -> 2, 1
Vertex 1 -> 
Vertex 2 -> 
>>> p = pickle.dumps(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/pickle.py", line 1366, in dumps
    Pickler(file, protocol).dump(obj)
  File "/usr/lib/python2.6/pickle.py", line 224, in dump
    self.save(obj)
  File "/usr/lib/python2.6/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.6/pickle.py", line 725, in save_inst
    save(stuff)
  File "/usr/lib/python2.6/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.6/pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/usr/lib/python2.6/pickle.py", line 663, in _batch_setitems
    save(v)
  File "/usr/lib/python2.6/pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "/usr/lib/python2.6/pickle.py", line 401, in save_reduce
    save(args)
  File "/usr/lib/python2.6/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.6/pickle.py", line 562, in save_tuple
    save(element)
  File "/usr/lib/python2.6/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.6/pickle.py", line 600, in save_list
    self._batch_appends(iter(obj))
  File "/usr/lib/python2.6/pickle.py", line 615, in _batch_appends
    save(x)
  File "/usr/lib/python2.6/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.6/pickle.py", line 725, in save_inst
    save(stuff)
  File "/usr/lib/python2.6/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.6/pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/usr/lib/python2.6/pickle.py", line 663, in _batch_setitems
    save(v)
  File "/usr/lib/python2.6/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.6/pickle.py", line 725, in save_inst
    save(stuff)
  File "/usr/lib/python2.6/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib/python2.6/pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/usr/lib/python2.6/pickle.py", line 663, in _batch_setitems
    save(v)
  File "/usr/lib/python2.6/pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "/usr/lib/python2.6/pickle.py", line 405, in save_reduce
    self.memoize(obj)
  File "/usr/lib/python2.6/pickle.py", line 244, in memoize
    assert id(obj) not in self.memo
AssertionError

当 v2 被删除时我工作了。

>>> v0 = Vertex(0)
>>> v1 = Vertex(1)
>>> e0to1 = Edge(v0, v1)
>>> v0.outgoing.add(e0to1)
>>> v1.incoming.add(e0to1)
>>> g = Graph()
>>> g.vertices[v0] = v0
>>> g.vertices[v1] = v1
>>> g.edges.add(e0to1)
>>> g.edges.add(e0to1)
>>> import cPickle as pickle
>>> p = pickle.dumps(g)
>>> print pickle.loads(p)
Vertex 0 -> 1
Vertex 1 -> 

你有什么主意吗?


旧的 pickle 协议无法处理某些类型的数据。要解决您的问题,请使用 pickle.HIGHEST_PROTOCOL

>>> p = pickle.dumps(g)
  File "/usr/lib/python2.6/pickle.py", line 244, in memoize
    assert id(obj) not in self.memo
AssertionError:
>>> p = pickle.dumps(g, pickle.HIGHEST_PROTOCOL)
>>> # No problem!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python pickle.dumps 断言错误 的相关文章

  • 从数据框中按索引删除行

    我有一个数组wrong indexes train其中包含我想从数据框中删除的索引列表 0 63 151 469 1008 要删除这些索引 我正在尝试这样做 df train drop wrong indexes train 但是 代码失败
  • Python Popen 与 psexec 挂起 - 不良结果

    我对 subprocess Popen 和我认为是管道的问题有疑问 我有以下代码块 从 cli 运行时 100 都不会出现问题 p subprocess Popen psexec serverName get cmd c ver echo
  • Python - 将宽字符字符串从二进制文件转换为 Python unicode 字符串

    这是漫长的一天 我有点困惑 我正在读取一个包含大量宽字符字符串的二进制文件 我想将它们转储为 Python unicode 字符串 为了解压非字符串数据 我使用 struct 模块 但我不知道如何对字符串执行相同的操作 例如 阅读 系列 一
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • 在 Tensorflow tf.nn.nce_loss 中出现 TypeError:'Mul' Op 的输入 'y' 的类型为 float32,与参数 'x' 的 int32 类型不匹配

    我正在研究 Tensor Flow 中的 Bag of Words 实现 并得到了 类型错误 Mul Op 的输入 y 的类型为 float32 与参数 x 的 int32 类型不匹配 在 tf nn nce loss 中 我尝试查看 tf
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 以同步方式使用 FastAPI,如何获取 POST 请求的原始正文?

    在中使用 FastAPIsync not async模式 我希望能够接收 POST 请求的原始 未更改的正文 我能找到的所有例子都显示async代码 当我以正常同步方式尝试时 request body 显示为协程对象 当我通过发布一些内容来
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • Python urllib.request.urlopen:AttributeError:'bytes'对象没有属性'data'

    我正在使用 Python 3 并尝试连接到dstk 我收到错误urllib包裹 我对SO进行了很多研究 但找不到与这个问题类似的东西 api url self api base street2coordinates api body jso
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 在Python中按属性获取对象列表中的索引

    我有具有属性 id 的对象列表 我想找到具有特定 id 的对象的索引 我写了这样的东西 index 1 for i in range len my list if my list i id specific id index i break
  • 字典和数组作为类变量与实例变量

    这是赚取积分的简单方法 请解释以下内容 class C a b 0 c def init self self x def d self k v self x k v self a k v self b v self c append v d
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1

随机推荐

  • 从 APK 安装应用程序时出现 java.lang.ClassNotFoundException [重复]

    这个问题在这里已经有答案了 我在下面描述的错误发生在以下情况 直接通过 APK 在设备上安装应用程序 通过 Play 商店下载应用程序 在以下情况下不会发生该错误 通过 Eclipse 安装 apk 按下 运行 按钮 java lang R
  • 使用反射来指定委托的类型(附加到事件)?

    我实际上想做的是这样的 我意识到这不是有效的代码 Attach the event try EventInfo e mappings name e EventHandlerType handler sender raw gt AutoWra
  • 当 Activity 从 Web 服务请求 SoapObject 时,如何实现 ProgressDialog?

    我知道带有线程的 ProgressDialog 问题已被问过很多次 但似乎没有一个解决方案适合我的项目 基本上我想做的是这样的 1 当用户单击按钮时 活动向服务器发送身份验证请求 2 执行此操作时会显示 ProgressDialog 3 当
  • 如何在html代码中打印twig变量

    我创建了一个变量 如下所示 set checkboxHTML
  • AndEngine 加载库时出错

    我在运行 andengine 的示例时遇到问题 我收到的错误是在这一行 System loadLibrary andenginephysicsbox2dextension 无法加载 andenginephysicals2 扩展 查找库返回
  • 在Jquery中如何处理粘贴? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 jQuery 中处理 oncut oncopy 和 onpaste jQuery 捕捉粘贴输入 我有一个文本区域 粘贴到我想要的文本区域 设置粘贴值的格式 附加到文本区域 这可以用 JavaS
  • 嵌套 ng-repeat 中的 Angularjs ng-class-odd

    我正在尝试开发一个非常通用的表格输出器 没有设定的行数或列数 因此 我有嵌套的 ng repeat 属性 如下所示 table tr td printCell row col td tr table 效果很好 直到我尝试使用ng class
  • ArrayList 中的计数 - Java

    更新的代码 Collections frequency 您已经可以使用此功能Collections类 在frequency method public static int frequency Collection
  • 如何按照一定的规则改变散点图的颜色

    我必须绘制一个散点图 其颜色取决于第三个变量 如果变量在 0 和 1 之间 则给出 蓝色 1 2 红色 2 3 紫色 3 4 绿色 4 5 灰色 我怎样才能做到这一点 x 1 2 3 4 5 y 3 4 2 3 4 c 1 2 4 0 5
  • 访问 Google Container Engine 上的 Kubernetes API

    根据 Kubernetes API 文档 可以创建 列出 删除 Pod 复制控制器和服务 http kubernetes io third party swagger ui v1beta1 然而 在 Google Container Eng
  • 如何在 Android 中合并多个 pdf 来转换单个 pdf?

    我的 SD 卡中有多个单页 PDF 文件 现在我需要以编程方式将这些单页 PDF 文件合并到一个 PDF 文档中 我使用 Android PDF Writer 库来创建这些单个 PDF 文件 我该怎么做 我尝试了一些代码和问题 但找不到任何
  • 在 Python 中类型转换为“int”会生成错误的结果

    我尝试在 Python 3 3 中执行以下类型转换操作 整数 10 23 10 输出 10000000000000000000000 并且在将功率增加一个或更多之后 整数 10 24 10 输出 9999999999999999161139
  • 在代码隐藏中设置 WPF UI 权限

    我想看看是否可以在 WPF 中执行以下操作 用户打开 WPF 应用程序并使用用户 AD 名称 我将检查自定义数据库中的用户角色 这将类似于 asp net 会员数据库 根据用户角色 WPF 将显示某些控件 例如 如果我是管理员 那么我将有权
  • 设置 JPanel 大小以填充父级且边距很小

    我有两个 Jpanel J面板左 and Jpanel左侧内容 我怎样才能使 JpanelLeftContent 填充父级大小 并在左侧和右侧留出一点边距 我尝试过不同的布局并尝试修改 hgap 和 vgap 值 但没有一个给我带来好的结果
  • 如何使用 CSS 更改单选按钮的大小?

    有没有办法控制 CSS 中单选按钮的大小 这个CSS似乎可以解决问题 input type radio border 0px width 100 height 2em 将边框设置为 0 似乎允许用户更改按钮的大小并让浏览器以该大小呈现它 例
  • 通过 FastAPI 中的 pydantic 模型设置自定义错误响应的媒体类型

    在我的 FastAPI 应用程序中 我想将错误作为 RFC Problem JSON 返回 from pydantic import BaseModel class RFCProblemJSON BaseModel type str tit
  • Laravel 5中使用ajax从表中删除记录

    我想用ajax删除记录 view foreach products as product tr td product gt code td td product gt name td td product gt display td td
  • Excel 迭代工作表

    我有一个包含许多工作表的工作簿 如果前面的单元格与给定的字符串匹配 我需要在其中输入一个值 我的代码适用于我需要的工作表 但当它到达一些不需要的工作表 其中也有数据 时 它会出错 调试器突出显示的行是For Each r In Inters
  • 在 HTA 文件中使用 Javascript 从 Windows 注册表中读取/写入

    我目前正在尝试编写 Javascript 以便在 HTA 文件中读取和写入 Windows 注册表 这是我当前用来编写的代码 writeInRegistry function sRegEntry sRegValue Regpath HKEY
  • python pickle.dumps 断言错误

    我正在尝试腌制一个包含另一个实例的两个列表的类实例 两个列表中的实例具有引用彼此实例的属性 这是课程 import pickle from copy import copy class Graph def init self self ve