TypeError:尝试从api返回内容时,列表索引必须是整数或片,而不是str

2024-06-09 07:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个使用mojang和Hypix API的discord机器人。我试图返回第一行(仅限于游戏类型和模式)

{"success":true,"games":[{"date":1588679703604,"gameType":"DUELS","mode":"CLASSIC_DUEL","map":"Neon"},{"date":1588679671468,"gameType":"DUELS","mode":"CLASSIC_DUEL","map":"Skyport"},{"date":1588679612412,"gameType":"DUELS","mode":"CLASSIC_DUEL","map":"Arena"},{"date":1588679573171,"gameType":"DUELS","mode":"CLASSIC_DUEL","map":"Spikerock Bay"},{"date":1588679530855,"gameType":"DUELS","mode":"CLASSIC_DUEL","map":"Backwood"},{"date":1588679503914,"gameType":"DUELS","mode":"CLASSIC_DUEL","map":"Spikerock Bay"},{"date":1588679453072,"gameType":"DUELS","mode":"CLASSIC_DUEL","map":"Highset"},

我就是这样做的:

def get_session(name):
    url1 = f"https://api.mojang.com/users/profiles/minecraft/{name}"

    res = requests.get(url1)
    data = res.json()
    if data["id"] is None:
        return None
    returnUuid = (data["id"])

    url2 = f"https://api.hypixel.net/recentGames?key={API_KEY}&uuid=" + returnUuid

    res = requests.get(url2)
    data = res.json()
    if data["games"] is None:
        return None
    returnGametype = (data["games"]["gameType"])
    returnGamemode = (data["games"]["mode"])

但是它给了我一个错误,Command Raised an exception: TypeError: list indices must be integers or slices, not str.

我认为这与多行有关。不过我不知道该怎么办


Tags: noneapimapdatagetdatemoderes
2条回答

正如您所注意到的,它与多行有关

{"success":true,"games":[
{"date":1588679703604,"gameType":"DUELS","mode":"CLASSIC_DUEL","map":"Neon"},
{"date":1588679671468,"gameType":"DUELS","mode":"CLASSIC_DUEL","map":"Skyport"}...]

端点返回json,即对于键'games'具有数组/多个值。 因此,如果要获取数组中第一个元素的'gameType''mode'值,必须编写:

 returnGametype = (data["games"][0]["gameType"])
 returnGamemode = (data["games"][0]["mode"])

词典嵌套在一个列表中。这就是索引错误的原因(因为列表索引不能是字符串)。如果要使用“游戏”列表中的第一个结果,请使用第一个索引(0):

game_type = data["games"][0]["gameType"]
game_mode = data["games"][0]["mode"]

相关问题 更多 >