#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