pickle错误异常_pickle.UnpicklingError和AttributeError

本文介绍了在Python中使用pickle进行反序列化时遇到的问题及解决方法,强调了正确导入自定义类的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

_pickle.UnpicklingError: NEWOBJ class argument isn't a type object

AttributeError: Can't get attribute 'admin' on <module '__main__' from 'C:PycharmProjects/subject_system/src/admin_interface.py'>

先看原来错误的代码 

import pickle
from conf import setting

with open(setting.ADMIN, 'rb') as file:
    print(pickle.load(file))

我在setting.ADMIN的路径的文件存的是自定义类admin实例化的对象,直接用pickle的load方法反序列化会抛出异常:

AttributeError: Can't get attribute 'admin' on <module '__main__' from 'C:PycharmProjects/subject_system/src/admin_interfa

ce.py'>

说是在admin_interface.py文件中找不到admin变量,于是我又导入了自定义的admin模块

import pickle
from src import admin
from conf import setting

with open(setting.ADMIN, 'rb') as file:
    print(pickle.load(file))

运行了一下 ,又抛出异常:

_pickle.UnpicklingError: NEWOBJ class argument isn't a type object

 百度了一下,也没找到解决方法

最后想了一下pickle反序列化的原理,反序列化应该是根据一个模板将二进制数据还原的过程,所以应该导入序列化时自定义类型

import pickle
from src.admin import admin
from conf import setting

with open(setting.ADMIN, 'rb') as file:
    print(pickle.load(file))
 

这下下运行结果正常了

{1: <src.admin.admin object at 0x05594D10>}

 总结:

在使用pickle反序列化的时候,要预先导入二进制数据中存在的自定义类数据的类

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值