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反序列化的時候,要預先導入二進制數據中存在的自定義類數據的類


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM