You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pickle保存pyprover逻辑表达式对象?

如何用pickle保存pyprover的逻辑表达式?

问题场景

尝试用pickle保存pyprover生成的逻辑表达式时,反序列化阶段出现AttributeError: 'Top' object has no attribute 'elems'错误,代码及报错如下:

测试代码

!pip install pyprover
import pickle
from pyprover import *

logic = ~A & B

print(1,logic)
print(2,type(logic))
print(3,type(A))

with open("test.pickle","wb") as f:
  pickle.dump(logic,f)

with open("test.pickle","rb") as f:
  logic2 = pickle.load(f) # error

print(logic2)

运行报错

1 ~A & B
2 <class 'pyprover.logic.And'>
3 <class 'pyprover.logic.Prop'>
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-27-4cd4fe38fcb4> in <module>
     12 
     13 with open("test.pickle","rb") as f:
---> 14   logic2 = pickle.load(f) # error
     15 
     16 print(logic2)

AttributeError: 'Top' object has no attribute 'elems'

解决方案

方法一:字符串中转序列化(推荐,无需修改库)

利用pyprover逻辑表达式可转为字符串、且字符串可通过eval还原的特性,先将表达式转为字符串再序列化,加载时反向解析:

!pip install pyprover
import pickle
from pyprover import *

logic = ~A & B

# 保存:将表达式转为字符串后pickle
with open("test.pickle","wb") as f:
  pickle.dump(str(logic), f)

# 加载:读取字符串后用eval还原
with open("test.pickle","rb") as f:
  logic_str = pickle.load(f)
  logic2 = eval(logic_str)

print(logic2)  # 输出:~A & B
print(type(logic2))  # 输出:<class 'pyprover.logic.And'>

方法二:为Top类添加pickle支持(从根源修复)

报错原因是pyprover的Top类未实现pickle所需的序列化方法,导致反序列化时误将其当作包含elems属性的对象处理。可手动为Top类添加__getstate__和__setstate__方法:

!pip install pyprover
import pickle
from pyprover import *
from pyprover.logic import Top

# 为Top类添加pickle支持
def top_getstate(self):
    return {}  # Top是单例,无需保存状态

def top_setstate(self, state):
    pass  # 加载时直接使用单例实例

Top.__getstate__ = top_getstate
Top.__setstate__ = top_setstate

logic = ~A & B

# 正常序列化/反序列化
with open("test.pickle","wb") as f:
  pickle.dump(logic,f)

with open("test.pickle","rb") as f:
  logic2 = pickle.load(f)

print(logic2)  # 输出:~A & B

内容的提问来源于stack exchange,提问作者ryoryon66

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:35:29