**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我正在做一个discord.py机器人,用一个简单的JSON数据库来描述国家。我在YouTube上看了一个教程(从2020年开始)来做到这一点:
import discord
from discord.ext import commands
import random
import json
client = commands.Bot(command_prefix=";", intents=discord.Intents.all())
@client.event
async def on_ready():
print("Bot is online")
@client.command()
async def spam(ctx):
for x in range(5000):
await ctx.send("IT'S SPAM TIME!")
@client.command()
async def info(ctx):
a = await register_country(ctx.author)
users = await data()
name = users[str(ctx.author.id)]["name"]
leader = users[str(ctx.author.id)]["leader"]
em = discord.Embed(title=ctx.author.name+"'s balance")
em.add_field(name = "Name: "+str(name))
em.add_field(name = "Leader: "+str(leader))
await ctx.send(embed = em)
async def register_country(user):
users = await data()
if str(user.id) in users:
return False
else:
users[str(user.id)]["name"] = "Undefined"
users[str(user.id)]["leader"] = "Undefined"
with open("onu.json", "w") as f:
json.dump(users, f)
return True
async def data():
with open("onu.json", "r") as f:
users = json.load(f)
return users
client.run("MT...")
但是,当我运行代码时,我得到了这个错误:
Output
我不知道是不是和某个版本有关,因为我看的制作代码的教程是2020年的
2条答案
按热度按时间sigwle7e1#
我相信错误是在 register_country 函数中。您正在访问一个不存在的字典键。如果您替换此部分
与
应该可以
mjqavswn2#
正如Hazzu所说,问题是字典键在字典中不存在的情况下被访问,可能是由于异步调用,为了防止这种情况,当试图从字典中获取键值时,应该始终使用
dict.get(key, default_value)
函数,字典可能有也可能没有该键(如异步调用):在这种情况下,如果值存在,函数将返回该值,如果不存在,则返回默认参数,以防止程序引发异常。