如何用Python-discord.py读取JSON文件中的数字?
修复读取JSON警告数的代码问题
你的代码会返回整个JSON文件内容,核心问题有两个:
- 没正确定位到存储成员警告数的内层字典——你的JSON外层是
{"Youtube tutorial bot test": {...}},必须先拿到这个内层字典,才能找到对应成员的数字值 - 你访问
warns[str(member.name)]后没有保存这个值,最后返回的仍是整个warns字典(也就是整个文件内容)
修复后的代码
import json import discord def warns_check(member: discord.Member): with open('warns.json', 'r') as f: warns_data = json.load(f) # 先获取存储警告信息的内层字典 member_warn_dict = warns_data["Youtube tutorial bot test"] # 返回对应成员的警告数,成员不存在时默认返回0(避免报错) return member_warn_dict.get(str(member.name), 0) @client.command() async def checkwarns(ctx, member: discord.Member): warn_count = warns_check(member) await ctx.send(f"{member.name} has {warn_count} warnings")
补充说明
- 用
dict.get()方法可以避免成员不在JSON中时抛出KeyError,如果需要特殊处理成员不存在的情况,你可以把默认返回的0改成自定义提示,比如返回"No warnings found"并在命令里做对应处理 - 现在
warns_check函数返回的是单个数字,而非整个JSON字典,发送的消息只会显示对应成员的警告数
内容的提问来源于stack exchange,提问作者Ivan Parvanov
相关产品推荐
相关产品推荐

