Discord.py 代码未正确读取/写入 JSON 文件

我检查用户是否在表中的代码:


@client.event

async def on_message(ctx):

    id = ctx.author.id

    with open('coins.json') as coins:

        coinData = json.load(coins)


    with open('shop.json') as shop:

        shopData = json.load(shop)


    await client.process_commands(ctx)


    if id in coinData:

        print('exists')

    else:

        coinData["players"][id] = 0

        with open('coins.json', 'w') as coins:

            json.dump(coinData, coins)




它正在读取的 JSON 文件:


{"players": {"325616103143505932": 0}}

当有人发送消息时会发生什么:


{"players": {"325616103143505932": 0, "325616103143505932": 0}}

而且它不会在控制台中打印“存在”,无论该人发送了多少消息,但它只添加了两次键值对。


蛊毒传说
浏览 80回答 1
1回答

幕布斯7119047

在 python 中,字符串值和整数值是不同的。>>> a = 1>>> b = '1'>>> a == bFalse因此,您应该将现有的 json 文件转换为使用整数 ID(通过删除引号)或使用str()将整数 ID 转换为字符串。这里使用的是字符串转换(对于整数,您无需更改任何内容,只需更新您的文件):@client.eventasync def on_message(ctx):    id = str(ctx.author.id) # this line    with open('coins.json') as coins:        coinData = json.load(coins)    with open('shop.json') as shop:        shopData = json.load(shop)    await client.process_commands(ctx)    if id in coinData:        print('exists')    else:        coinData["players"][id] = 0        with open('coins.json', 'w') as coins:            json.dump(coinData, coins)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python