为啥程序无法在我的经济不和谐机器人的 json 中添加带有我的 playerID 的字段? (密钥错误)

Posted

技术标签:

【中文标题】为啥程序无法在我的经济不和谐机器人的 json 中添加带有我的 playerID 的字段? (密钥错误)【英文标题】:Why does the program fail to add a field with my playerID in the json on my economy discord bot? (KeyError)为什么程序无法在我的经济不和谐机器人的 json 中添加带有我的 playerID 的字段? (密钥错误) 【发布时间】:2021-05-03 13:19:39 【问题描述】:

所以到目前为止我所做的是,我添加了一个注册命令,用于查看用户的不和谐 ID 是否在 .json 文件中。如果不是,它只会添加它并添加 2 个名为“Wallet”和“Bank”的属性,并将它们的值设置为起始值。

所以它的代码是:

    @bot.command()
async def register(ctx):
    oh = False
    await register_acc(ctx.author)

    if (oh == False):
        ctx.send(f'You already have an account dum dum')
    else:
        ctx.send(f'You have successfully registered an account.')

async def register_acc(user):
    with open("users.json", "r") as f:
        users = json.load(f)

    if str(user.id) in users:
        return False
    else:
        users[str(user.id)]["Wallet"] = 0
        users[str(user.id)]["Bank"] = 0

    with open("users.json", "w") as f:
        json.dump(users,f)
    return True

我得到的错误:

文件“C:\Users\janvf\Desktop\Bob\main.py”,第 79 行,在寄存器中 等待 register_acc(ctx.author)

文件“C:\Users\janvf\Desktop\Bob\main.py”,第 93 行,在 register_acc users[str(user.id)]["Wallet"] = 0 KeyError: 'my discord id'

有什么我很明显的遗漏吗? 我尝试编写 json 有点不同,但后来意识到我也完全错了。

【问题讨论】:

【参考方案1】:

把 else 语句改成这样:

else:
    users[str(user.id)] = "Wallet": 0, "Bank": 0

KeyError 是因为users[str(user.id)]["Bank"] = 0 试图更改字典users[str(user.id)] 中不存在的键“Bank”的值。相反,创建键 users[str(user.id)] 并将其设置为包含“Wallet”和“Bank”值的字典,如上所示。

【讨论】:

谢谢!工作就像一个魅力,我现在明白问题是什么以及如何解决它。 很高兴我能帮上忙 :)【参考方案2】:

我相信错误就在这里

等待 register_acc(ctx.author)

我想这会在您的代码中返回 None,因为 ctx 没有作者属性。 您必须将此行更改为

等待 register_acc(ctx.message.author)

这会将 Member 对象传递给您的 register_acc 方法

查看discordpy API here的文档

【讨论】:

我查看了文档,似乎 ctx 确实有一个 author 属性,所以我认为这不是问题所在。 discordpy.readthedocs.io/en/latest/ext/commands/…

以上是关于为啥程序无法在我的经济不和谐机器人的 json 中添加带有我的 playerID 的字段? (密钥错误)的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到主机。 Heroku 和不和谐机器人问题

为啥我的频道消息发送代码不起作用?

为啥我的不和谐机器人命令不起作用

为啥我的不和谐机器人不发送每日消息

为啥我的不和谐机器人不知道它的@Mention?

为啥我的不和谐机器人只执行一次我的命令,而且只执行一次?