为啥程序无法在我的经济不和谐机器人的 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 的字段? (密钥错误)的主要内容,如果未能解决你的问题,请参考以下文章