Discord-py通过Guild ID获取服务器对象触发AttributeError如何解决
问题原因
- 核心报错来源是
client.get_guild(id)执行后返回了None,空对象调用channels属性就触发了AttributeError,具体有两类常见触发场景:- 参数类型不匹配:命令接收的
id参数默认是字符串类型,而get_guild要求传入整数类型的服务器ID,类型不匹配导致无法匹配到对应服务器,返回空值 - 服务器不存在/机器人未加入:你传入的ID不是有效Discord服务器ID,或者你的机器人账号没有加入对应ID的服务器,
get_guild只能获取机器人已加入的服务器对象,未加入就会返回None
- 参数类型不匹配:命令接收的
- 额外代码问题:你代码中写的
a.channels()写法错误,channels是Guild对象的属性不是可调用方法,不需要加括号,就算前面的空值问题解决,这行也会触发新的报错。
解决方法
按照以下步骤修改代码即可:
- 给命令参数添加类型标注,自动将传入的ID转为整数类型
- 新增空值判断逻辑,找不到对应服务器时给出明确提示,避免空对象调用报错
- 修正
channels属性的调用写法,去掉后面的括号
修正后代码示例:
@client.command() async def getchannels(ctx, id: int): a = client.get_guild(id) # 空值判断 if not a: await ctx.send("未找到对应服务器,请检查ID是否正确,且机器人已加入该服务器") return # 去掉channels后面的括号 for c in a.channels: print(c.id) await ctx.send("频道ID已输出到控制台")
内容的提问来源于stack exchange,提问作者Takaso2
相关产品推荐
相关产品推荐

