AttributeError: Can‘t get attribute ‘xxx‘ on <module ‘__main__‘ from ‘xxx‘

在学习python时,开发学生选课系统,期间出现AttributeError: Can't get attribute 'Course' on <module '__main__' from '/Users/lijing/PycharmProjects/pythonProject/学生选课系统大作业/teacher_homeworkday25/bin/start.py'>报错。

首先看下项目结构

我们是在start.py中启动的项目 

db包下存储了学生、管理员的登录信息(userinfo),课程对象(course_info),学生对象(student_info)

解决方案:

然后我们看下报错代码,当调用get_from_pickle读取student_info或者course_info时,就会出现AttributeError: Can't get attribute 'Student' on <module '__main__' from '/Users/lijing/PycharmProjects/pythonProject/学生选课系统大作业/teacher_homeworkday25/bin/start.py'>或者AttributeError: Can't get attribute 'Course' on <module '__main__' from '/Users/lijing/PycharmProjects/pythonProject/学生选课系统大作业/teacher_homeworkday25/bin/start.py'>的报错信息,意思是无法从start模块中找到Student或者是Course的类定义

查阅了相关资料后,第一种方法

可以编写一个客户反序列化器,它知道何时遇到__main__模块并引用真正创建类定义的模块。告诉程序需要从core.core模块中找到类定义,而不是从start模块中

代码如下

import pickle

class MyCustomUnpickler(pickle.Unpickler):

    def find_class(self, module, name):

        if module == "__main__":

            module = "program"

        return super().find_class(module, name)

with open('out.pkl', 'rb') as f:

    unpickler = MyCustomUnpickler(f)

    obj = unpickler.load()

print(obj)

print(obj.name)

第二种方法

start文件导入core模块的方式改为from core.core import *,程序还是会从start模块中找Student和Course的类定义,这样写是在start模块中引用core模块中所有的变量。程序的执行只需写一个main()即可

 

参考资料:

由于原文是英文直译,阅读时可能会有很多不通顺的地方

读取pickle文件时的AttributeError - 第一PHP社区tt

拓展资料:

python:copyreg --- 注册配合 pickle 模块使用的函数_做好自己提升技术的博客-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AttributeError: Can't get attribute 'SPPF' on <module 'models.common' from 'D:\\PyCharmProject\\yolov5-5.0\\yolov5-5.0\\models\\common.py'> 这个错误是由于在<module 'models.common' from 'D:\\PyCharmProject\\yolov5-5.0\\yolov5-5.0\\models\\common.py'>模块中找不到名为'SPPF'的属性所引起的。提供的信息中,没有具体给出关于'SPPF'的详细说明。然而,根据引用中提到的'models.common'模块路径,我可以推测这个错误可能与该模块中的代码有关。 要解决这个问题,您可以采取以下步骤: 1. 确认您的代码中引用了正确的模块和属性。检查导入语句和代码中的拼写错误或者命名错误。 2. 检查您的代码中是否遵循了正确的调用方法和语法。确保正确地使用了属性或方法,并避免错误的参数传递。 3. 确保您的代码中的依赖项和库已经正确地安装和配置。检查您的环境和依赖项是否缺失或不匹配。 4. 如果您是使用第三方库或框架,尝试查找相关文档或社区支持,以获取更多关于'SPPF'的信息和解决方法。 根据以上步骤,您可以定位并解决引起AttributeError的原因,并修复代码中的错误。请注意,在解决问题时,详细阅读错误消息和相关文档可能会对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [进行解决AttributeError: Can‘t get attribute ‘SPPF‘ on module ‘models.common‘ from](https://blog.csdn.net/m0_50004939/article/details/126739291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [AttributeError: Cant get attribute SPPF on module models](https://blog.csdn.net/qq_41704415/article/details/121860291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值