【发布时间】:2015-11-17 00:28:48
【问题描述】:
我是 Python 新手。我正在将其他人的代码从 Python 2.X 改编为 3.5。该代码通过 cPickle 加载文件。我将所有“cPickle”事件更改为“pickle”,因为我了解 pickle 在 3.5 中取代了 cPickle。我得到这个执行错误:
NameError: name 'cPickle' is not defined
相关代码:
import pickle
import gzip
...
def load_data():
f = gzip.open('../data/mnist.pkl.gz', 'rb')
training_data, validation_data, test_data = pickle.load(f, fix_imports=True)
f.close()
return (training_data, validation_data, test_data)
当load_data() 被另一个函数调用时,错误出现在pickle.load 行。但是,a)cPickle 或 cpickle 都不再出现在项目中任何位置的任何源文件中(全局搜索),并且 b)如果我在 Python shell 中单独运行 load_data() 中的行,则不会发生错误(但是,我确实收到了另一个数据格式错误)。 pickle 是否在调用 cPickle,如果是,我该如何阻止它?
壳牌: Python 3.5.0 |Anaconda 2.4.0 (x86_64)| (默认,2015 年 10 月 20 日,14:39:26) [GCC 4.2.1 (Apple Inc. build 5577)] 在 darwin 上
IDE:IntelliJ 15.0.1、Python 3.5.0、anaconda
不清楚如何进行。任何帮助表示赞赏。谢谢。
【问题讨论】:
-
检查
.pyc文件并删除它们。它们可能已经过时了。
标签: python python-3.x intellij-idea pickle