You need to enable JavaScript to run this app. Discord-py通过Guild ID获取服务器对象触发AttributeError如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Discord-py通过Guild ID获取服务器对象触发AttributeError如何解决

问题原因
  • 核心报错来源是 client.get_guild(id) 执行后返回了 None,空对象调用channels属性就触发了AttributeError,具体有两类常见触发场景:
    1. 参数类型不匹配:命令接收的id参数默认是字符串类型,而get_guild要求传入整数类型的服务器ID,类型不匹配导致无法匹配到对应服务器,返回空值
    2. 服务器不存在/机器人未加入:你传入的ID不是有效Discord服务器ID,或者你的机器人账号没有加入对应ID的服务器,get_guild只能获取机器人已加入的服务器对象,未加入就会返回None
  • 额外代码问题:你代码中写的a.channels()写法错误,channels是Guild对象的属性不是可调用方法,不需要加括号,就算前面的空值问题解决,这行也会触发新的报错。
解决方法

按照以下步骤修改代码即可:

  1. 给命令参数添加类型标注,自动将传入的ID转为整数类型
  2. 新增空值判断逻辑,找不到对应服务器时给出明确提示,避免空对象调用报错
  3. 修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 20:36:03