如何破译这个cPickle错误?

时间:2012-12-12 19:48:34

标签: python python-2.7 pickle

我有一个名为classifier.pkl的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'))

我的代码是unpickle:

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

我的错误:

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

不久前,我通过挑选三件事来制作.pkl文件:

  • 功能:列表
  • extract_features:function
  • 分类器:NLTK朴素贝叶斯分类器的实例

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

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

为什么我不能检索三件事?即使我不打算拆开元组?

更新

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

1 个答案:

答案 0 :(得分:1)

问题在于,当你挑选一个函数时,只会腌制函数的(完全限定的)名称,而不是函数本身。这意味着当你进行unpickling时,你必须有功能定义。

你有没有想要挑选调用extract_features结果