首页 > 解决方案 > pickle 加载的对象与预期的不同

问题描述

我正在尝试使用 nevergrad 优化函数并将生成的建议保存在泡菜中。但是当我断言 saved_obj == loaded_obj 时会引发错误。

要重现我上传 per_recommendation.pkl 的问题: https ://drive.google.com/file/d/1bqxO2JjrTP2qh23HT-qdr9Mf1Kfe4mtC/view?usp=sharing

import pickle
import nevergrad

# load obj (in the real code this is the result of some optimization)
with open('/home/franchesoni/Downloads/per_recommendation.pkl', 'rb') as f:
  r2 = pickle.load(f)
# r2 = optimizer.minimize(fn)

# save the object
with open('/home/franchesoni/Downloads/per_recommendation2.pkl', 'wb') as f:
  pickle.dump(r2, f)

# load the object
with open('/home/franchesoni/Downloads/per_recommendation2.pkl', 'rb') as f:
  recommendation = pickle.load(f)

# they are different!
assert r2 == recommendation

这是正常的还是预期的?

题外话:在python 文档中我读到pickle 是不安全的,打开(例如)我上传的文件是否危险?显示 /home/franchesoni 之类的路径是否危险?

标签: pythonpicklenevergrad

解决方案


推荐阅读