遇到奇怪的key错误,是json还是我的语句有关系?

问题描述

我正在编写一个 discord.py bot,这是警告命令,它会通过警告 cmd 记录警告! 为什么会出现关键错误?我的 JSON:

{"777618366894571530": {"1": "ROMO charged by ROMO#6714 for demo"}}

我用来获取警告的脚本:

if str(guildid) in warns:
    for value in warns.items():
        
        warnval = warns[str(guildid)][value]
        if user in warnval:
            embed.add_field(name=f"``Warn {value}``",value=f"{warnval}",inline=True)
        
else:
  await ctx.send("Guild has no warns!")

我的完整警告 cmd 从 json 中获取警告:

  @command()
  @cooldown(9,20,BucketType.user)
  async def warns(self,ctx,user : discord.Member):
    guild = user.guild
    guildid = user.guild.id
    userid = user.id
    print("LOADING")
    warns = {}
    guildid = ctx.guild.id
    placing = (len(warns)+1)
    with open("./warns.json","r") as f:
      warns = json.load(f)

    embed = discord.Embed(title=f"Warns",description= f"Warns for user {user}",color=0x00ff00)

    
    if str(guildid) in warns:
      for value in warns.items():
        
        warnval = warns[str(guildid)][value]
        if user in warnval:
          embed.add_field(name=f"``Warn {value}``",inline=True)
        
    else:
      await ctx.send("Guild has no warns!")
    

    embed.set_footer(text=f"These are {user.display_name}'s warns.")
    await ctx.send(embed=embed)


解决方法

我认为这就是你想要的:

found_warning = False
if str(guildid) in warns:
    for key,warnval in warns[str(guildid)].items():
        if user.name in warnval:
            embed.add_field(name=f"``Warn {key}``",value=f"{warnval}",inline=True)
            found_warning = True
if not found_warning:
    await ctx.send("Guild has no warns!")

items() 返回包含字典键和值的元组。您只想在值中搜索用户。您不需要再次索引字典,因为它会返回值。

使用 found_warning 变量来判断它是否在任何警告中找到了用户。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...