最近在写项目的时候,用到了pickle模块把对象写进了文件,但是在调用的时候却遇到了下图错误
翻译一下就是在读取文件中的对象时未找到模块,打开对应文件:
发现,pickle在写入类对象时会将对应的类文件路径写入,我在文件内导包时为方便调试随手用了.Person,而pickle.dump把这个路径也写到了文件里。当外部文件导包时就会发生问题。
这就回到了老生常谈的导包问题了。
所有调用改成’from bank.package.文件 import 类‘即可。
https://www.jianshu.com/p/22bfcede92fd这篇文章详细写了使用pick时容易遇到的两种错误,相对较详细。
pickle.dumps()或pickle.dump()封装时,会根据你所加载的类对象对数据进行对象化,同时也会把类对象的路径也打包进去,记录下它是根据那个目录下的哪个类进行封装的,同样解析时也要找到对应目录下的对应类进行解析还原
在同一个项目或文件中能完全使用,因为类对象路径没有变化