为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蛊毒传说 2022-12-14 20:39:33
我检查用户是否在表中的代码:@client.eventasync 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}}而且它不会在控制台中打印“存在”,无论该人发送了多少消息,但它只添加了两次键值对。
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

在 python 中,字符串值和整数值是不同的。


>>> a = 1

>>> b = '1'

>>> a == b

False

因此,您应该将现有的 json 文件转换为使用整数 ID(通过删除引号)或使用str()将整数 ID 转换为字符串。


这里使用的是字符串转换(对于整数,您无需更改任何内容,只需更新您的文件):


@client.event

async 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)


查看完整回答
反对 回复 2022-12-14
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信