如何将API数据输出到Discord机器人并解决KeyError: 'cod'报错
错误原因
- 你使用的随机手机号API返回的JSON结构中不存在
cod字段,cod是天气类接口的常用状态字段,直接套用其他接口的逻辑自然会触发KeyError: 'cod'报错 - 原有代码还存在其他逻辑错误:你将数值类型的
x["id"]赋值给y后尝试取y["phone"],取值逻辑完全不符合接口返回结构,手机号实际直接存放在返回JSON的phone_number字段中 - 缺失基础的请求状态校验和异常捕获逻辑,报错直接中断程序运行
修正后完整代码
import requests import discord from discord.ext import commands # 前缀和权限根据你自己的Bot配置调整 client = commands.Bot(command_prefix="!", intents=discord.Intents.all()) @client.command() async def o(ctx): channel = ctx.message.channel url = "https://random-data-api.com/api/phone_number/random_phone_number" try: response = requests.get(url, timeout=10) # 直接校验HTTP请求状态是否正常 response.raise_for_status() x = response.json() async with channel.typing(): # 按接口实际结构取手机号字段 cell_phone = x["phone_number"] embed = discord.Embed( title=f"生成的随机手机号:{cell_phone}", color=0x00FFFF, timestamp=ctx.message.created_at, ) await channel.send(embed=embed) except requests.exceptions.RequestException: await channel.send("接口请求失败,请稍后重试") except KeyError as e: await channel.send(f"返回数据异常,缺失字段:{e}") # 替换为你自己的Bot Token后运行 # client.run("YOUR_BOT_TOKEN")
改动说明
- 删除了不存在的
cod字段校验逻辑,用HTTP响应状态校验替代 - 修正了字段取值逻辑,适配目标接口的实际返回结构
- 新增全局异常捕获,避免报错直接导致程序崩溃
- 调整了变量作用域逻辑,避免出现变量未定义的报错
内容的提问来源于stack exchange,提问作者MollyDuty
相关产品推荐
相关产品推荐

