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

#python #discord.py

Вопрос:

Я начну с того, что перепробовал и повторил все, что мог придумать, мне просто нужна дополнительная помощь или формальное обучение, я думаю. В любом случае, вот в чем моя проблема. У меня есть начальная часть, работающая там, где она создает все, борьба, которую я испытываю, — это следующая ошибка:

 Unhandled exception in internal background task 'update_stats'.
Traceback (most recent call last):
  File "C:UsersRichard IlleAppDataLocalProgramsPythonPython39libsite-packagesdiscordexttasks__init__.py", line 101, in _loop
    await self.coro(*args, **kwargs)
  File "C:UsersRichard IlleDesktopYota Inc discord botYota Inc Bot.py", line 1484, in update_stats
    chan1a = chan1[str(guild.id)]
KeyError: '626094990984216586'
 

Я также включу здесь свой код, однако я потратил много времени на поиск в Интернете безрезультатно. Это всего лишь часть task.loop, но это та часть, которая не работает. Я заставил его работать как команду, но, очевидно, это не идеальное решение.

 @tasks.loop(seconds=600)
async def update_stats():   
    for guild in client.guilds:
        allmem = guild.member_count
        mem = len([m for m in guild.members if not m.bot])
        bots = allmem - mem
        boosts = guild.premium_subscription_count
        with open('allmem.json', 'r') as fp:
            chan1 = json.load(fp)
        #print(f'chan1: {chan1}')
        chan1a = chan1[str(guild.id)]
        #print(f'chan1a: {chan1a}')
        with open('mem.json', 'r') as fp:
            chan2 = json.load(fp)
        #print(f'chan2: {chan2}')
        chan2a = chan2[str(guild.id)]
        #print(f'chan2a: {chan2a}')
        with open('bots.json', 'r') as fp:
            chan3 = json.load(fp)
        #print(f'chan3: {chan3}')
        chan3a = chan3[str(guild.id)]
        #print(f'chan3a: {chan3a}')
        with open('boosts.json', 'r') as fp:
            chan4 = json.load(fp)
        #print(f'chan4: {chan4}')
        chan4a = chan4[str(guild.id)]
        #print(f'chan4a: {chan4a}')
    #if chan1a:
        channel = client.get_channel(chan1a)
        print(f'channel: {channel}')
        await channel.edit(name=f'All Members: {allmem}')
        #await ctx.send('updated')
    #if chan2a:
        channel2 = client.get_channel(chan2a)
        print(f'channel2: {channel2}')
        await channel.edit(name=f'Members: {mem}')
    #if chan3a:
        channel3 = client.get_channel(chan3a)
        print(f'channel3: {channel3}')
        await channel.edit(name=f'Bots: {bots}')
        #await ctx.send('updated')
    #if chan4a:
        channel4 = client.get_channel(chan4a)
        print(f'channel4: {channel4}')
        await channel.edit(name=f'Boosts: {boosts}')
update_stats.start()
 

Комментарии:

1. Просто ключа нет в дикте, другими словами, '626094990984216586' его нет в вашем файле JSON

Ответ №1:

Проверьте, существует ли ваш ключ в вашем словаре, прежде чем пытаться получить к нему доступ, иначе это приведет к этому.

 if str(guild.id) in chan1:
    #do work