PyCharm中disnake.User报未解析属性引用但Member不报及解决
问题产生原因
- 类实现差异:
disnake.Member重写了__getattr__魔术方法,用于动态返回和所属服务器绑定的相关属性(比如角色权限、服务器专属昵称、语音状态这类字段),而disnake.User没有重写该方法,所有属性都是静态明确定义在类中的。 - PyCharm默认检查规则:2022.1版本的PyCharm为了兼容大量使用动态属性的框架、减少无效误报,默认会对定义了无明确返回类型
__getattr__的类,跳过未解析属性的检查逻辑。disnake 2.5.1中Member.__getattr__刚好没有写精确的返回类型标注,直接命中了这条跳过规则,所以访问不存在的属性时不会抛出Unresolved attribute reference错误。 - 自动补全不受影响的原因:IDE的自动补全是基于类显式定义的属性、配套类型存根生成的,和未解析属性的错误检查是两套独立逻辑,所以两个类的补全功能都能正常生效。
配置修复方法
按以下步骤操作即可让disnake.Member正常触发属性引用错误检查:
- 关闭
__getattr__类的检查白名单
打开PyCharm设置,依次进入Editor > Inspections > Python > Unresolved references,在右侧配置面板找到Ignore unresolved references on classes with "__getattr__"选项,取消前面的勾选,点击Apply保存配置。 - 修复合法属性误报(可选,推荐操作)
disnake 2.5.1自带的类型标注没有覆盖Member的所有动态属性,关闭上述白名单后可能出现少量确实存在的属性被误判为不存在的情况,可通过两个操作解决:- 在终端执行命令安装社区维护的类型补全包:
pip install types-disnake - 安装完成后清除IDE缓存重启:点击
File > Invalidate Caches...,勾选清除文件系统缓存选项后确认,等待PyCharm重启重建索引即可。
- 在终端执行命令安装社区维护的类型补全包:
- 个别特殊场景下的动态属性如果仍被误报,直接在对应代码行末尾添加
# type: ignore[attr-defined]注释做局部忽略即可,不会影响全局的属性检查逻辑。
内容的提问来源于stack exchange,提问作者Pokruk
相关产品推荐
相关产品推荐

