您现在的位置是:首页 >技术杂谈 >AttributeError: Can‘t get attribute ‘xxx‘ on <module ‘__main__‘ from ‘xxx‘网站首页技术杂谈
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模块中
代码如下
|
第二种方法
start文件导入core模块的方式改为from core.core import *,程序还是会从start模块中找Student和Course的类定义,这样写是在start模块中引用core模块中所有的变量。程序的执行只需写一个main()即可
参考资料:
由于原文是英文直译,阅读时可能会有很多不通顺的地方
读取pickle文件时的AttributeError - 第一PHP社区tt
拓展资料: