Выдаёт ошибку 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
→ Ссылка