python - 如何破译这个 cPickle 错误?

标签 python python-2.7 pickle

我有一个名为 classifier.pkl 的 pickled 文件,我正试图将其加载到另一个模块中。但是,我收到一个我不明白的错误。

我要 pickle 的代码:

features = ['bob','ice','snowing'] #... shortened for exposition's sake
def extract_features(document):
      return  {'contains(%s)'% word: (word in set(document)) 
                 for word in all_together_word_list} 
training_set = classify.util.apply_features(extract_features,tweets[0])
classifier = NaiveBayesClassifier.train(training_set)
cPcikle.dump(open('cocaine_classifier.pkl','wb'))

我要解开的代码:

features, extract_features, classifier = 
         cPickle.load(open('cocaine_classifier.pkl','rb'))

我的错误:

AttributeError: 'module' object has no attribute 'extract_features'

不久前,我通过 pickle 三样东西制作了 .pkl 文件:

  • 特征:列表
  • extract_features:函数
  • 分类器:NLTK 朴素贝叶斯分类器的实例

令人费解的是,我用下面的代码得到了同样的错误:

x = cPickle.load(open('cocaine_classifier.pkl','rb'))

为什么我不能取回三样东西?即使我不尝试解包元组?

更新

正如 NPE 所指出的,要解封的函数的路径必须与要解封的函数完全匹配。我正在调试和终端,所以 from mod import * 将所有内容加载到命名空间中,而 import mod as m 则没有。

最佳答案

问题是,当您 pickle 一个函数时,只会 pickle 函数的(完全限定的)名称,而不是函数本身。这意味着您必须在进行 unpickling 时将函数定义就位。

您是否有意 pickle 调用 extract_features结果

关于python - 如何破译这个 cPickle 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13847450/

相关文章:

python - pandas 中的 maskind 数据框元素

python - 在 python 中跳过 for 循环中的迭代?

Python不会导入模块

python - 使用多处理时 cv2.Boost 的 Pickle 异常

Python - append 到 pickle 列表

c# - 如何在C#中模拟元组和集合?

python - 修改多列数据框

python - 如何在运行 python 脚本时清除 cmd/terminal

python - 在 python 中创建一个螺旋数组?

python - 如何通过 API 编码 pickle 对象(最好使用 flask-restplus )?