【发布时间】:2022-01-23 22:15:31
【问题描述】:
使用我的不和谐机器人,我正在尝试将一堆不同命令的响应存储在一个 json 文件中。该命令只是一组胆量,键为“胆量”,值是一个包含不同字符串的列表。当我使用with open() 函数时,它会将其注册为一个目录,您可以打印原始文件,但是当您尝试使用var = json.load 时,它什么也做不了。该行之后的任何代码都不会运行。
我使用 shell 命令直接进入该文件并打开它。这完全没问题。文件打印正常。
@commands.command()
async def dare(self, ctx):
"""Gives the user a dare to do"""
with open("cogs/docs/json/responses.json") as f:
print(-1)
print(f)
data = json.load(f)
print(0)
dares = data["dare"]
print(1)
selectedDare = random.choice(dares)
await ctx.reply(selectedDare)
上面的代码只打印到-1 和f。没有什么过不去的。 f 只是打印对象。我也试过json.loads 等,没有任何效果。 JSON 已正确安装。我完全迷路了。
所有的响应都存储在一个列表中,这是仅用于此命令的响应。
// this is all the responses for the dares
{
"dare":[
"Dare #1",
"Dare #2",
"Dare #3"
]
}
我的机器人处理错误有一个 CommandError,但没有进一步的。
# if a command flags an error it handles it
@client.event
async def on_command_error(ctx, error):
"""Handles errors"""
if isinstance(error, commands.CommandError):
print("CommandError found")
return
【问题讨论】:
-
你有错字吗?您的代码有:
dares = data["dares"],但您发布了一些json与:{ "dare":[ ... ] } -
啊,这是一个错字,谢谢,但正如帖子中所说,代码甚至没有出现在那里。我还将 json 文件编辑为 3 个字符串而不是原来的 40+,所以我可能忘记了最后的
s.. -
也许
json.load()会导致异常。它是否在其他地方被捕获并被忽略? -
...请求minimal reproducible example 的部分目的是为了让我们可以捕获上述异常处理之类的内容,而无需玩 20 个问题。
-
...问题中包含的代码应该是最短的可能会导致在没有任何更改的情况下运行时询问确切错误的内容。这段代码在没有更改的情况下运行会导致不同的错误(没有
imports,没有该方法所属的类,等等)。
标签: python json python-3.x discord.py pycord