pickle错误异常_pickle.UnpicklingError和AttributeError
_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反序列化的时候,要预先导入二进制数据中存在的自定义类数据的类