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

Python报错‘object has no attribute’后莫名恢复正常,求原因

排查Python中"object has no attribute"诡异消失问题

你遇到的这种情况确实离谱——代码没改,折腾半天突然正常,大概率是IDE缓存或者Python运行环境的问题,和代码本身关系不大。结合你用的PyCharm和Python3.10,给你梳理几个可能的原因和解决办法:

可能的原因及解决步骤

  • PyCharm缓存异常:PyCharm有时候会残留旧的编译缓存,导致运行的代码和你看到的不一致。解决办法:

    1. 点击顶部菜单栏 File -> Invalidate Caches...
    2. 在弹出的窗口中选择 Invalidate and Restart,重启IDE后再测试
  • Python模块导入缓存:如果这个类是在某个自定义模块里,Python会缓存已导入的模块对象,即使你修改了文件,解释器可能还是用旧版本。解决办法:

    • 直接重启整个Python解释器(比如重启PyCharm的运行配置)
    • 如果是在交互式环境中,用importlib.reload(你的模块名)强制重新加载模块
  • 初始化方法未正常执行:你的代码里__init__方法会调用requests.get,如果当时网络异常或者API返回错误,self.response可能没被成功初始化,这时候调用quest_func就会报"object has no attribute 'response'"。后来恢复代码时刚好网络正常了,所以错误消失。可以在__init__里加个简单的打印验证:

    def __init__(self):
        print("初始化开始")
        self.response = requests.get(url="https://opentdb.com/api.php?amount=10&type=boolean")
        self.response.raise_for_status()
        print("初始化完成")
    
  • 命名冲突:检查项目中有没有和这个类同名的文件或模块(比如有没有data.py),如果有,可能导致导入错误,误加载了其他模块的内容。

你的代码小建议

按照PEP8规范,Python类名应该采用大驼峰命名法,把class data:改成class Data:,虽然这不是导致你报错的原因,但能让代码更规范。

附上你的代码:

class data:
    def __init__(self):
        self.response = requests.get(url="https://opentdb.com/api.php?amount=10&type=boolean")
        self.response.raise_for_status()

    def quest_func(self):
        self.data_list = self.response.json()['results']
        return self.data_list

内容的提问来源于stack exchange,提问作者AliG D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:05:27