You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python出现'QuizBrain'对象无user_r属性的AttributeError报错求解

报错根因

你碰到的AttributeError和是否在__init__中声明user_r没有直接关系,本质是属性的调用时机早于创建时机:

  • Python语法本身允许在类的任意实例方法中给self绑定新属性,不强制要求所有属性必须在__init__中提前定义
  • 你的代码运行后,while循环的判断条件会优先执行quiz_brain.check_answer(),此时还没有调用过next_question()方法,self.user_r还没有被赋值创建,自然会报属性不存在的错误。

修复方案

首先调整循环的执行逻辑,先触发答题获取用户输入,再校验答案:

# 替换原有while循环部分代码
while quiz_brain.still_have_questions():
    # 先出题获取用户输入,此时才会创建self.user_r属性
    quiz_brain.next_question()
    # 再校验答案,答错直接退出
    if not quiz_brain.check_answer():
        break

另外你还存在隐藏的逻辑错误:next_question()中拿到用户输入后已经执行了self.current_number += 1,后续check_answer()中取self.answer_list[self.current_number]会拿到下一题的答案,甚至最后一题会触发索引越界,你可以调整数值递增的时机,或者在校验答案时用self.current_number - 1作为索引取值。

关于__init__声明属性的说明

  • 语法层面没有强制要求必须在__init__中声明所有属性,只要保证调用属性前,已经执行过self.xxx的赋值逻辑就可以正常运行
  • 工程实践中更推荐在__init__中提前声明所有实例属性,哪怕先赋值为None,既可以提升代码可读性,也能避免意外的属性未定义报错,比如你也可以在__init__中加一行self.user_r = None提前占位,也能解决本次报错,但这并没有解决你代码逻辑顺序错误的核心问题。

内容的提问来源于stack exchange,提问作者7223이시윤

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:54:06