最近开始学习python,一门优雅的语言,初学者在没有人教的情况下总是会在一些细节上栽跟头,而且通常都栽得很惨...我也是这样,所以想把一些我坑的地方记录下来,如果你也遇到了同样的问题,不妨和我讨论讨论,或者看看我的见解。本人初学,说的不一定对,仅供参考!!!
————————————写在前面
在学习对象持久化的时候学习了pickle和shelve,在练习的工程下创建了几个文件存储了几个表示个人信息的对象。对象的类是在当前工程下的一个自定义模块定义的,当时只是很简单的用from...import...导入后就用了。后来在另一个工程中需要pickle文件,记得之前做过就直接拷贝过来了。可是在读取的时候却出现错误。当时是做的WEB界面,代码比较杂,没找到到底错在哪里,还以为是cgi脚本的逻辑错了,找了半天,汗...
后来注释掉所有代码单独读取时才发现程序找不到类信息,错误信息是说找不到某某模块,也就是当初我定义类的模块。这时候才意识到pickle存储对象时,对于类它应该只是记住了类的原型在哪里,也就是记住了存储的时候是怎么找到那个类的,在以后打开的时候也用同样的方法去找。自然在当前的工程是找不到当初的模块的,所以理所当然的失败了...
知道原因就好办了,为了以后方便,我直接设置了PYTHONPATH环境变量,将自己写的比较公用的模块放了进去,然后重新使用shelve存储对象信息,这次我的自定义模块就可以通过python的搜索路径自动找到了,无论在那个工程里都可以使用了。