首页 > 解决方案 > API调用不断给出keyerror?不和谐蟒蛇

问题描述

我一直试图让这个变量列表工作,但它一直给我 keyerror 我试过改变变量等但不会工作

@client.command()
async def info(ctx):
    url = ('https://randomuser.me/api/')

    response = requests.get(url)
    title = response.json()["title"]
    first = response.json()["first"]
    last = response.json()["last"]
    number = response.json()["number"]
    street = response.json()["name"]
    city = response.json()["city"]
    state = response.json()["state"]
    postcode = response.json()["postcode"]
    country = response.json()["country"]
    phone = response.json()["phone"]
    age = response.json()["age"]
    dob = response.json()["date"]
    gender = response.json()["gender"]
    username = response.json()["username"]
    password = response.json()["password"]
    image = response.json()["large"]

    embed = discord.Embed(title="Fake Info Generator", description=f"**Name:** '{title}', '{first}' '{last}'\n**Address:** '{number}' '{street}', '{city}', '{state}', '{postcode}', '{country}'\n**Phone:** '{phone}'\n**Age:** '{age}', '{dob}'\n**Gender:** '{gender}'", color=18321)
    embed.set_footer(text="Random Info")                                                
    embed.set_image(url=f"'{image}'")
                                                           
    await ctx.send(embed=embed)

我已经尝试过将变量更改为这样的东西,但仍然无法正常工作

title = response.json()["name"][0]["title"]

标签: pythondiscorddiscord.py

解决方案


仅仅是因为这就是 JSON 读取的工作方式。

您需要指定要读取的值的整个“路径”。你不能只是得到response.json()["title"],因为响应不是这样格式化的。

响应 JSON 格式如下:

{
   "results":[
      {
         "gender":"female",
         "name":{
            "title":"Madame",
            "first":"Germaine",
            "last":"Rey"
         },
         ...
      }
   ],
   ...
}

为了能够阅读title,您需要阅读results索引 0 处的数组内容(因为您只关心第一个结果)然后检查名称,最后检查标题,所以它看起来像这样:response.json()["results"][0]["name"]["title"]


推荐阅读