Python 小萌新遭遇 AttributeError: module \'__main__\' has no attribute \'xxx\' 错误,如何解决?

Python 小萌新遭遇 AttributeError: module \'__main__\' has no attribute \'xxx\' 错误,如何解决?

python 小萌新遭遇attributeerror错误

许多初学者在编写代码过程中会出现一个十分常见的错误,那就是attributeerror:module '__main__' has no attribute 'xxx'。当出现这样的错误时,大多数情况下问题源于在其他模块中使用__main__模块中的类或变量导致的。

导致这种错误的最常见原因是:

  • 模块名错误: 确保你在导入模块时使用了正确的模块名。
  • 未正确导入模块: 确保你使用 import 或 from ... import 语句正确导入了模块。
  • 错误的属性名称: 确认你正在尝试访问的属性名称在导入的模块中定义。

让我们来看一个示例并尝试通过打印cls变量来调试错误。

import sys
from core import enter
from core import student
from core import manager

flag0 = 1

def main():
    print('33[1;34m欢迎进入学生选课系统33[0m'.center(50, '*'))
    ret = enter.login()
    if ret:
        cls = getattr(sys.modules['__main__'], ret['status'])  # 得到类名
        if cls == 'student':
            obj = student.cls(ret['username'])  # 根据类名实例化对象
        else:
            obj = manager.cls(ret['username'])
        while flag0:
            if ret['status'] == 'student':
                print('33[1;34m学生选课系统:学生端33[0m'.center(50, '*') + 'n')
                print(('33[1;34m当前登录用户:%s33[0m' % obj.name).center(50))
            else:
                print('33[1;34m学生选课系统:管理员端33[0m'.center(50, '*') + 'n')
            for key, item in enumerate(cls.li, 1):
                print(str(key).center(20), item[0])
            num = int(input('n输入您要做的操作序号:'))
            if num <= len(cls.li):
                getattr(obj, cls.li[num - 1][1])()
            else:
                print('33[1;32mn你的输入有误,请重新输入!33[0m')

接着,我们打印了一下cls变量的类型,如下所示:

>>> type(cls)

发现cls变量居然是一个函数。这说明我们没有正确导入模块,因此无法在主模块中使用core模块中的类。

接下来,我们检查了core模块的代码,发现实际上core模块中并没有定义enter、student、manager这三个类,因此 naturalmente 会报错。

为了解决这个问题,我们需要修改core模块的代码,如下所示:

class Student:
    # ...

class Manager:
    # ...

修改完core模块后,我们再次运行主模块,问题解决了!

以上就是Python 小萌新遭遇 AttributeError: module '__main__' has no attribute 'xxx' 错误,如何解决?的详细内容,更多请关注昆居客【www.kunjuke.com】。

相关推荐:

波音遭遇 IT 问题,商用与军用生产均受影响

7 月 1 日消息,据行业媒体《The Air Current》消息,航空航天巨头 Boeing(波音)在当地时间 6 月 30 日遭遇大规模 IT 故障,其全美国的商用与军用生产均出现严重中断。报道指出,尽管波音仍在 2026Q2 的最后一天完成了一些交付,但其最终检查和文书工作基本陷入停滞。波音在一份公告中表示已查明本次计算机系统和应用故障的原因,目前没有迹象显示是网络攻击所致。该企业 IT ...

米侠浏览器如何解决图片加载不出来只显示占位框的问题?

图片显示空白方框或灰色占位符,首要原因是“图片加载”功能被关闭;需在设置→隐私与安全中开启该开关,否则后续所有修复均无效。 米侠浏览器访问网页时图片只显示空白方框或灰色占位符,说明图片资源请求已发出但未成功渲染,常见于缓存损坏、加载权限关闭、扩展拦截或混合内容被阻断等场景。 确认图片加载功能已启用 米侠浏览器默认提供“无图模式”节能开关,一旦开启,所有标签将被直接跳过解析,只留空框。【这是最常被忽...

如何解决Safari浏览器中iframe嵌套外部页面的Cookie跨域限制?

Safari中iframe嵌入外部页面时Cookie失效是因第三方Cookie拦截,需通过用户显式跳转使目标域名变第一方;方案包括前端引导页跳转、服务端302重定向或iframe自刷新、Nginx反向代理同域映射。 当你的网站在Safari中通过iframe嵌入外部页面(如合作方系统、第三方应用)时,该页面无法设置或读取Cookie,导致登录态丢失、会话中断、跳转失败——这不是代码bug,而是Sa...

如何解决WebRTC在Safari浏览器中无法获取麦克风和摄像头权限的问题?

Safari中WebRTC无法调用麦克风和摄像头,主因是系统级权限未开启、网站级媒体权限未授予、HTTPS安全要求不满足或权限缓存异常;需依次检查并配置macOS隐私设置中的麦克风/相机授权、Safari网站设置中的对应权限、地址栏实时授权,必要时重置权限记录,并确保使用HTTPS或localhost进行调试。 WebRTC在Safari中无法调用麦克风和摄像头,通常不是代码问题,而是系统级或浏览...

观涛云信如何解决短信验证码接收不到的问题

观涛云信用户收不到短信验证码需依次排查:信号与网络注册状态、短信拦截设置、短信中心号码(SMSC)准确性、短信存储空间及数据库索引,并可临时启用语音验证码。 观涛云信用户在登录、注册或重置密码时收不到短信验证码,可能是信号异常、拦截设置开启、运营商通道受限或短信中心号码错误导致。需按实际接收环境逐项排查,避免跳过基础检查直接联系客服。 先确认手机基础通信状态是否正常 打开手机拨号界面,拨打1008...

AdGuard提示证书错误怎么办 AdGuard浏览器插件修复方法【攻略】

AdGuard启用HTTPS过滤后提示证书错误,源于其自签名根证书未被系统信任,需手动安装并设为受信任,同时清除SSL缓存、排查安全软件冲突。 AdGuard浏览器插件启用后突然提示“证书错误”或“您的连接不是私密连接”,通常不是网站本身问题,而是AdGuard在启用HTTPS过滤时自动生成并安装了本地根证书,而该证书未被系统或浏览器完全信任,导致所有HTTPS页面被拦截并报错。 检查AdGuar...

搜狗浏览器如何解决浏览器卡顿_搜狗浏览器卡顿解决实战

搜狗浏览器卡顿需按六步排查:一、结束高内存sogouexplorer进程;二、启用五级加速并开启全网加速;三、切换并锁定高速内核模式;四、开启GPU硬件加速并验证about:gpu状态;五、清理缓存与禁用干扰扩展;六、运行内置修复工具。 如果您在使用搜狗浏览器时频繁遭遇页面响应迟缓、滚动卡顿、视频播放掉帧或标签页切换僵硬等现象,则很可能是由内核调度异常、GPU加速未生效、后台进程资源争抢或扩展干扰...

如何解决QoderWake数字人合成过程中的卡顿问题

QoderWake数字人合成卡顿的解决方法包括:一、启用轻量级运行模式以降低资源占用;二、切换至ONNX Runtime-CPU推理后端提升稳定性;三、限制并发任务数与子任务深度防止内存溢出;四、关闭非必要Connector实时同步释放系统资源;五、校准音频输入质量及dynamic_scale参数优化唇形同步。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1...
· AI · 180727