@Kinishil

Как исправить ошибку — Command raised an exception: KeyError: 'info'?

Код:
@bot.command()
async def server(ctx,ip,port):
    url = ip + '_' + port
    req = requests.get('https://minecraft-statistic.net/api/server/info/' + url)
    json = req.json()
    text = json['info']
    print()
    if str(json['status']) == '1':
        status = 'Online'
    else:
        status = 'Offline'
    Embed = discord.Embed(title='Инфо о сервере!',color=0xff0000)
    Embed.add_field(name='Назвение:',value=text['name'])
    Embed.add_field(name='Версия:',value=text['version'])
    Embed.add_field(name='Статус:',value=status)
    Embed.add_field(name='Онлайн:',value=str(text['max_players']) + '/' + str(text['players']))  
    Embed.add_field(name='Айпи:',value=json['ip'] + ':' + str(json['port']))
    Embed.set_footer(text='ID:' + str(json['_id']))
    await ctx.send(embed = Embed)

Ответ json(Пример):
Спойлер
{
    /*(int) id сервера в мониторинге*/
    "_id": 51,
    /*(string) уникальный адрес сервера в мониторинге (если есть, администратор сервера может менять ip адрес сервера и порт)*/
    "uri": "supersky",
    /*(object) график игроков онлайн за 24 часа, с интервалом 10 минут*/
    "chart": {
        /*(string) время в формате HH:ii и количество игроков онлайн (int)*/
        "00:00": 13,
        /* . . . */
        "23:50": 13
    },
    /*(object) счетчики сервера*/
    "counter": {
        /*(int) количество комментариев (отзывов)*/
        "cmts": 4,
        /*(int) лайки, количество человек,которые добавили сервер в избранное*/
        "favorite": 4,
        /*(int) счетчик оффлайна, сколько раз сервер был оффлайн с момента добавления*/
        "offline": 16077,
        /*(int) счетчик онлайна, сколько раз сервер был онлайн с момента добавления*/
        "online": 74564,
        /*(object) общее количество игроков которые играли на сервере с момента добавления*/
        "players": {
            /*(string) дата в формате YYYY-mm-dd , когда делался подсчет игроков (счетчик считается раз в сутки и всегда отображает данные на вчерашний день)*/
            "date": "2015-06-23",
            /*(int) количество игроков, которые играли на сервере*/
            "total": 27482
        },
        /*(int) количество добавленных скриншотов*/
        "screenshot": 6
    },
    /*(int) дата добавления сервера в мониторинг, в формате Unix Timestamp*/
    "date_add": 1379283352,
    /*(string) домен сервера, при добавлении конвертируется в IP адрес*/
    "domain": "mc.supersky.org.ua",
    /*(string) ссылка на загрузку лаунчера, отображается на странице сервера*/
    "download_url": "",
    /*(object) геоданные сервера*/
    "geo": {
        /*(string) город сервера*/
        "city": "Sevastopol",
        /*(string) страна сервера в формате ISO 3166 A2*/
        "country": "UA",
        /*(string) страна сервера*/
        "country_name": "\u0423\u043a\u0440\u0430\u0438\u043d\u0430"
    },
    /*(object) основная информация о сервере*/
    "info": {
        /*(string) название сервера, обновляется при опросе ( в настройках сервера это переменная motd )*/
        "name": "SuperSky Survival 1.7.x-1.8.x",
        /*(string) тип игры*/
        "type": "SMP",
        /*(string) платформа сервера, возможные значения "MINECRAFT" или "MINECRAFTPE"*/
        "platform": "MINECRAFT",
        /*(string) версия сервера*/
        "version": "1.8",
        /*(array) список плагинов, которые установлены на сервере*/
        "plugins": ["WorldEdit 6.0.2-SNAPSHOT,3347-fe6717a0", " HealthBar 1.8.2", " PvPTime 0.1.22", " Essentials TeamCity", " LogBlock 1.81", " ClearLag 2.7.7", " AutoMessage 2.5.2", " FullBright 1.1", " MonsterFix 0.4.3", " ProtocolLib 3.6.3-SNAPSHOT", " WorldGuard 6.0.0-SNAPSHOT.1550-", " NoCheatPlus 3.12.1-SNAPSHOT-sMD5NET-b823", " SkinsRestorer 9.3", " HeadDrops 2.0", " PermissionsEx 1.23.3", " RandomPort 2.0", " ColoredTablist 1.1.0", " Vault 1.5.0-b28", " HideStream 3.7", " ProtocolSupport 4.13", " EssentialsSpawn TeamCity", " SalvageSmelter 0.1.8", " CustomEnchantments 2.2a", " Autorank 3.5.1-Dev-382", " AuthMe 3.4", " ScoreboardStats 0.9.1", " GlobalMarket 1.2.2", " ChatEx 1.2", " ChatGuard 6.3"],
        /*(int) количество игроков онлайн*/
        "players": 16,
        /*(int) максимальное количество игроков (слоты)*/
        "max_players": 30,
        /*(array) список игроков онлайн*/
        "players_list": ["Shamandra", "vlad_3881", "ATmega8", "Koshmarik", "Gohjay", "vipit", "msx9086", "Creeper1903", "__Pig131__", "baklajan", "marines", "uaruk", "dasides", "thelinx", "KORVELION", "saf_alex_100"],
        /*(string) название карты сервера*/
        "map": "world",
        /*(string) программное обеспечение сервера*/
        "software": "CraftBukkit on Bukkit 1.8-R0.1-SNAPSHOT",
        /*(float) среднее количество игроков за 24 часа*/
        "avg_player_day": 14.83,
        /*(float) средняя загрузка сервера за 24 часа*/
        "avg_load_day": 49.42
    },
    /*(string) ip адрес сервера (v4)*/
    "ip": "91.200.47.122",
    /*(object) дата последнего онлайна/оффлайна*/
    "last": {
        /*(int) дата последнего оффлайна в формате Unix Timestamp*/
        "offline": 1434915770,
        /*(int) дата последнего онлайна в формате Unix Timestamp*/
        "online": 1435056332
    },
    /*(int) дата обновления данных в формате Unix Timestamp*/
    "last_update": 1435056332,
    /*(string) ссылка на карту сервера (url на страницу с отрендериной картой), отображается в ссылках сервера*/
    "map_url": "",
    /*(object) рекорды сервера*/
    "max_stat": {
        /*(object) максимальный онлайн*/
        "max_online": {
            /*(int) дата максимального онлайна в формате Unix Timestamp , если рекорд повторяется (совпадает значение) или поставлен новый рекорд, то дата обновляется*/
            "date": 1434882170,
            /*(int) количество игроков онлайн*/
            "players": 30
        }
    },
    /*(int) порт сервера*/
    "port": 25565,
    /*(object) данные рейтинга*/
    "rating": {
        /*(float) Коэффициент контента, сколько процентов от подсчитаного рейтинга получит сервер дополнительно, за то что добавил описание, скриншоты и т.п.*/
        "K": 12.23,
        /*(float) бонус за контент (смотрите формулу подсчета рейтинга)*/
        "content_up": 0.77,
        /*(float) разница рейтинга с предыдущим значением (на сколько изменился рейтинг за 10 минут)*/
        "difference": 0.73,
        /*(float) текущий рейтинг сервера*/
        "main": 7.73
    },
    /*(int) статус опроса 1 - мониторинг включен, 0 - мониторинг отключен (сервер отключается от мониторинга автоматически, если его аптайм ниже 5%)*/
    "scan": 1,
    /*(int) статус сервера 1 - онлайн, 0 - оффлайн*/
    "status": 1,
    /*(string) аптайм сервера в процентах (соотношение количества оффлайна к количеству опросов)*/
    "uptime": "82.26",
    /*(string) or (array) список ссылок сервера, добавляется администратором из панели управления и отображается на странице сервера*/
    "url": [],
    /*(string) ответ API "ok" - сервер существует и все хорошо*/
    "status_query": "ok"
}

Ошибка:
Ignoring exception in command server:
Traceback (most recent call last):
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord.py-1.5.0-py3.8.egg\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "main.py", line 70, in server
    text = json['info']
KeyError: 'info'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord.py-1.5.0-py3.8.egg\discord\ext\commands\bot.py", line 903, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord.py-1.5.0-py3.8.egg\discord\ext\commands\core.py", line 859, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord.py-1.5.0-py3.8.egg\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: KeyError: 'info'


Но странно! Когда код отдельно:
import requests
ip = '217.106.107.160'
port = '35664'

url = ip + '_' + port
req = requests.get('https://minecraft-statistic.net/api/server/info/' + url)
json = req.json()
info = json['info']
print(info['name'])
if json['status'] == 1:
    print('Online')
else:
    print('Offline')

То работает
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Нет ключа info.

Но странно! Когда код отдельно: То работает

Либо чудо, либо все же разные данные приходят
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы