KeyError на Discord.Py - PullRequest
       75

KeyError на Discord.Py

0 голосов
/ 29 мая 2020
@client.command(description="Pauses the current playing track. Can be resumed with `!resume`.", 
brief="Pauses current track.",aliases=['PAUSE'])
async def pause(ctx):
    guild_id = ctx.message.guild.id
    players[guild_id].pause()

@client.command(description="Resumes the current playing track. Can only be used if current track has 
been paused.",
    brief="Resumes current track.",
    aliases=['RESUME','continue','CONTINUE'])
async def resume(ctx):
    guild_id = ctx.message.guild.id
    players[guild_id].resume()

@client.command(description="Stops the current playing track.",
     brief="Stops current track.",
     aliases=['STOP'])
async def stop(ctx):
    guild_id = ctx.message.guild.id
    players[guild_id].stop()

Когда я пытаюсь использовать команду паузы, остановки и возобновления, она выдает ошибку KeyError. Весь код, который вызывает эту ошибку, находится там. И ошибка выглядит так:

Игнорирование исключения в команде stop: Traceback (последний вызов последним): File "C: \ Users \ emirs \ PycharmProjects \ discordmasterbot \ venv \ lib \ site -packages \ discord \ ext \ commands \ core.py ", строка 83, в завернутом файле ret = await coro (* args, ** kwargs)" C: / Users / emirs / PycharmProjects / discordmasterbot / MASTERBOT.py " , строка 163, в Stop player [guild_id] .stop () KeyError: 708748879079932016

И есть другой тип этой ошибки:

Traceback (последний вызов last): файл "C: \ Users \ emirs \ PycharmProjects \ discordmasterbot \ venv \ lib \ site-packages \ discord \ ext \ commands \ bot.py", строка 892, в вызове await ctx.command.invoke (ctx ) Файл "C: \ Users \ emirs \ PycharmProjects \ discordmasterbot \ venv \ lib \ site-packages \ discord \ ext \ commands \ core.py", строка 797, в invoke await injected (* ctx.args, ** ctx.kwargs) Файл "C: \ Users \ emirs \ PycharmProjects \ discordmasterbot \ venv \ lib \ site-packages \ discord \ ext \ commands \ core.py", строка 92, в обернутом повышении CommandInvokeError (ex c) из exc discord.ext.commands.errors.CommandInvokeError: команда вызвала исключение: KeyError: 708748879079932016

1 Ответ

1 голос
/ 29 мая 2020

KeyError означает, что ключ для этого объекта не найден. В этом случае ID гильдии 708748879079932016 не существует в players.

Попробуйте добавить здесь блок try / except, чтобы отловить что-либо из этого.

@client.command(description="Pauses the current playing track. Can be resumed with `!resume`.", 
brief="Pauses current track.",aliases=['PAUSE'])
async def pause(ctx):
    try:
        guild_id = ctx.message.guild.id
        players[guild_id].pause()
    except KeyError:
        # do something that adds the guild ID to players #

@client.command(description="Resumes the current playing track. Can only be used if current track has 
been paused.",
    brief="Resumes current track.",
    aliases=['RESUME','continue','CONTINUE'])
async def resume(ctx):
    try:
        guild_id = ctx.message.guild.id
        players[guild_id].resume()
    except KeyError:
        # do something that adds the guild ID to players #

@client.command(description="Stops the current playing track.",
     brief="Stops current track.",
     aliases=['STOP'])
async def stop(ctx):
    try:
        guild_id = ctx.message.guild.id
        players[guild_id].stop()
    except KeyError:
        # do something that adds the guild ID to players #
...