Почему мой json-файл продолжает превращаться в строку случайных слов? (Python)

#python #json #discord.py

#питон #json #discord.py

Вопрос:

Итак, я создаю некоторую систему подсчета очков в python с помощью json и discord.py , это его код:

 import json

def getPoints(bot, user):
    f = open('points.json', 'r')
    points = json.load(f)

    name = str(user)
    f.close()
    return points.get(name)

#later on down the line

@bot.group()
async def pointSystem(ctx):
    pass

@pointSystem.command()
async def enable(ctx):
    f = open('points.json', 'r')
    points = json.load(f)
    if points.get(str(ctx.author)) != None:
        await ctx.send('Already enabled for this user!')
        return
    io = await ui.prompt(ctx, 'This command enables the point systemnAre you sure you want to enable this?')
    if io == 'yes':
        await ctx.send('Ok, enabling...')
        points[str(ctx.author)] = 0
        f.close()
        f = open('points.json', 'w')
        json.dump(points, f, indent=4)
        f.close()
        await ctx.send('Enabled for this user!')
    else:
        await ctx.send('Alright, stopping command execution...')
        f.close()
 

в points.json я должен иметь:

 {}
 

И это то, что я изначально туда вставил, но иногда я заглядываю в points.json и вижу строку с каким-то случайным словом в ней. Он не выдает никакой ошибки, он просто делает то, что я описал, что не имеет особого смысла, потому что я не думаю, что у меня есть какой-либо код, который установил бы его в строку любого вида. У меня нет кода воспроизведения, поскольку я не знаю настоящего виновника этой проблемы, я бы посоветовал вам сделать что-то вроде того, что я сделал, то есть создать discord-бота с этой системой подсчета очков, но я действительно не думаю, что даже это могло бы воспроизвести его.

Редактировать: Хорошо, это становится действительно странным. 3 месяца спустя, с совершенно новым кодом, у меня все еще есть файл с именем «points.json» в моем корневом каталоге, и он содержит случайную строку, о которой я упоминал выше, что буквально не имеет смысла. Даже когда я удаляю его, через пару недель он вернется.

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

1. У вас есть асинхронный код, но вы, например, не блокируете файл, в который вы пишете, когда вы его пишете, поэтому две или более задачи могут одновременно загружать в него JSON…

2. В целом, было бы лучше провести рефакторинг вашего кода, чтобы все операции с файлами обрабатывались отдельными функциями, а не материалом, смешанным с другими вашими функциями бота.

3. Блокировка файла не исправила это, я использую portalocker для его блокировки, поскольку fcntl отсутствует в Windows. Файл JSON по-прежнему превращается в строку случайных слов.

4. Пожалуйста, приведите нам пример «строки случайных слов».

5. Это текущий: «MrNateBro»