运行代码报错'NoneType' object has no attribute 'members' 问题求助
错误原因
- 触发
'NoneType' object has no attribute 'members'报错的核心原因是你代码中调用.members属性的guildsd变量为空值,说明你提前获取服务器对象的步骤就执行失败,没有拿到有效的Discord服务器实例。 - 你提供的代码片段不完整,末尾的
if 'test' in content:没有后续的分支逻辑和代码闭合,同时也会触发语法报错。
解决方法
- 先校验
guildsd的获取逻辑,确保你传入了正确的整数类型服务器ID、bot已加入对应服务器,获取时先做非空判断再访问成员属性,参考逻辑如下:
# 替换为你自己的服务器ID,必须为整数格式,不要加引号 guildsd = bot.get_guild(1234567890) if guildsd is None: await say("未找到对应服务器,请检查服务器ID是否正确、bot是否已加入该服务器") return
- 开启bot的成员读取权限:
- 进入Discord开发者后台的对应bot管理页,开启
Server Members Intent权限开关 - 重新邀请bot进服务器时,勾选成员读取相关的授权项
- 进入Discord开发者后台的对应bot管理页,开启
- 调整你代码中的逻辑顺序:你当前把
author == bot.user的判断放在了循环第一行,只要触发就直接返回,会导致循环完全无法执行后续逻辑,建议把这个判断移到循环外层,调整后的完整参考代码如下:
# 把bot自身判断移到最外层,避免提前终止逻辑 if author == bot.user: return # 替换为你自己的服务器ID guildsd = bot.get_guild(你的服务器ID) if not guildsd: await say("服务器获取失败") return for member in guildsd.members: if 'member' in content: await say(member) if 'test' in content: # 补全你自己的test分支逻辑 pass
- 补全你代码中
if 'test' in content:分支的后续逻辑,避免语法报错。
内容的提问来源于stack exchange,提问作者user17139235
相关产品推荐
相关产品推荐

