【问题标题】:Pickle AttributeError: Can't get attribute 'Wishart' on <module '__main__' from 'app.py'>Pickle AttributeError:无法从 'app.py'> 获取 <module '__main__' 上的属性 'Wishart'
【发布时间】:2018-05-17 14:49:47
【问题描述】:

我已经运行我的代码来加载我由 pickle 保存的变量。这是我的代码

import pickle 
last_priors_file = open('simpanan/priors', 'rb') 
priors = pickle.load(last_priors_file)

我得到这样的错误:AttributeError: Can't get attribute 'Wishart' on &lt;module '__main__' from 'app.py'&gt;

【问题讨论】:

  • 您的 pickle 引用了当前脚本中不存在的类。您是否将其移至不同的模块,或者您现在使用不同的模块作为脚本?
  • 换种说法:您现在在您的项目中anywhere 中定义了Wishart 类吗?你是如何制作泡菜的?
  • 类(和函数)不会被腌制,只存储有关如何在程序中再次找到相同类的参考。然后通过创建该类的新实例并将未腌制的数据加载到新实例中来加载实例。如果你删除了一个类,那么你就不能再加载泡菜了。如果类的位置发生变化,您需要使旧位置可用,以便能够再次取消提取数据。这可以简单地作为对同一类的额外引用。
  • 如果您在腌制对象后修改了类,然后想将其取消腌制到同一个对象中怎么办?
  • @MartijnPieters 您介意将您的评论作为答案吗?它立即帮助了我,而这里的答案对我没有帮助。它就像运行构建类的代码一样简单,不需要创建它的对象,也不需要用“生命”/数据填充该对象。因此,无需对对象进行任何计算,只需加载类即可。

标签: python pickle topic-modeling


【解决方案1】:

发生这种情况是因为当脚本以__name__ == '__main__' 运行时保存了腌制数据,因此它将Wishart 的位置保存为__main__.Wishart。然后,当您运行下一个脚本来加载数据时,范围内没有Wishart,因此它会失败。

在这种情况下,解决方法是在调用pickle.load之前简单地添加from wherever import Wishart

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多