Выдаёт ошибку KeyError: 'simp'
Когда пишу команду rep то выдаёт эту ошибку, не понимаю как пофиксить. Облазил много сайтов, смотрел видео на ютубе, у всех всё работает, но так и не понял как это сделать. Ошибка >KeyError: 'simp'. Линкая пользователя, пишет эту ошибку.
class simpat(commands.Cog):
def __init__(self,client):
self.client = client
os.chdir(r'C:\Users\Максим\Desktop\bot rune')
@commands.Cog.listener()
async def on_member_join(self,member):
with open('users.json', 'r') as f:
users = json.load(f)
async def update_data(users, user):
if not user.id in users:
users[user.id] = {}
users[user.id]['simp'] = 0
await update_data(users,member)
with open('users.json', 'w') as f:
users = json.load(f)
@commands.Cog.listener()
async def on_message(self,message):
with open('users.json', 'r') as f:
users = json.load(f)
async def update_data(users, user):
if not f'{user.id}' in users:
users[user.id] = {}
users[user.id]['simp'] = 0
await update_data(users, message.author)
with open('users.json', 'w') as f:
json.dump(users, f)
@commands.command(aliases = ['rep', 'симп'])
async def _simpatia(self,ctx,member:discord.Member):
with open('users.json', 'r') as f:
users = json.load(f)
async def update_data(users, user):
users[user.id] = {}
users[user.id]['simp'] += 1
await update_data(users,member)
with open('users.json', 'w') as f:
json.dump(users, f)
def setup(client):
client.add_cog(simpat(client))
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Ошибка должна быть тут users[user.id]['simp'] += 1, т.к. чтобы инкрементировать значение из 'simp', его сначала нужно достать, пример:
users[user.id]['simp'] = users[user.id]['simp'] + 1
Вот тут работать будет, т.к. это только добавление/установка ключа:
users[user.id]['simp'] = 0
Решение
Правильно будет или проверять значение по ключу и устанавливать по-умолчанию, или поменять код так:
if 'simp' not in users[user.id]:
users[user.id]['simp'] = 0
users[user.id]['simp'] += 1
Или через get с значением по умолчанию:
users[user.id]['simp'] = users[user.id].get('simp', 0) + 1
Или через defaultdict:
from collections import defaultdict
...
users[user.id] = defaultdict(int)
users[user.id]['simp'] += 1