Skip to main content
 首页 » 编程设计

python之如何破译这个 cPickle 错误

2025年05月04日8虾米哥

我有一个名为 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 的结果?