Команда вызвала исключение: TypeError: индексы списка должны быть целыми числами или слайсами, а не - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь получить несколько ключей? из словаря с помощью команды discordpy, но они имеют одинаковое имя.Вот код моей команды для получения значений ключей:

@bot.command()
async def shop(ctx):
    url = "https://fortnite-api.theapinetwork.com/store/get"
    req = requests.get(url)
    data = req.json()
    store = data["items"]["item"]["names"]
    await ctx.send(store)

Но я получаю:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/discord/ext/commands/bot.py", line 863, in invoke
    await ctx.command.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/discord/ext/commands/core.py", line 728, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/discord/ext/commands/core.py", line 88, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: list indices must be integers or slices, not str

Я использовал точно такой же метод для другого словаря, и онработал, но ключ? имена были все разные.

1 Ответ

1 голос
/ 23 сентября 2019

data - это словарь, но data['items'] - это список, поэтому вы не можете сделать data['items']['item'].

>>> import requests
>>> r = requests.get("https://fortnite-api.theapinetwork.com/store/get")
>>> data = r.json()
>>> type(data['items'])
<class 'list'>

Это список словарей, так что это работает:

>>> for item in data['items']:
...   print(item['item']['name'])
...
Cat's Claws
Batglider
Catwoman Comic Book Outfit
Whipcrack
Extraterrestrial
Caped Crusader
Commando
Bat Signal
Zorgoton
Team Space
Full tilt
...