API调用不断给出keyerror?不和谐蟒蛇

时间:2021-03-03 15:24:02

标签: python discord discord.py

我一直试图让这个变量列表起作用,但它一直给我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"]

1 个答案:

答案 0 :(得分:1)

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

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

响应 JSON 格式如下:

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

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