AttributeError: 'User'对象没有属性'guild_permissions'报错原因咨询
AttributeError: 'User' object has no attribute 'guild_permissions' 报错说明
报错核心含义
这是典型的Python属性访问错误,含义是你当前操作的User类实例对象,本身不存在guild_permissions这个属性,强行访问该属性就会触发报错。该报错绝大多数出现在Discord机器人开发场景(使用discord.py、pycord等相关开发库)中。
常见触发原因
- 混淆了
User对象和Member对象的功能边界
Discord相关开发库对两个对象的定位有明确区分:
User是全局用户身份对象,仅存储所有服务器通用的用户基础信息(用户名、用户ID、头像等),不绑定任何单个服务器(Guild)的属性,自然不会有服务器权限相关的guild_permissions字段;只有绑定了特定服务器的Member对象,才会携带用户在该服务器下的权限属性。
- 使用了错误的对象获取接口
类似await bot.fetch_user(user_id)、私聊场景下的message.author、未指定服务器的用户查询接口返回的都是User对象,直接调用.guild_permissions必然报错。如果需要获取用户在某服务器的权限,需要先获取该用户对应服务器下的Member对象,例如使用await guild.fetch_member(user_id)、服务器内交互场景下的interaction.member。 - 依赖库版本变动
部分Discord开发库的版本迭代中可能调整属性命名,或是移除旧属性,如果近期升级过依赖版本,也可能出现该报错,可以核对当前使用版本的官方文档确认属性命名规则。
排查方法
可以通过打印对象类型快速确认是否拿错了对象:print(type(你当前获取的用户对象变量名))
如果输出结果为<class 'discord.user.User'>,即可确认是对象类型不匹配的问题,替换为对应服务器的Member对象即可解决。
内容的提问来源于stack exchange,提问作者oron lankri
相关产品推荐
相关产品推荐

