discord.py警告命令“;“数据未定义”;

discord.py警告命令“;“数据未定义”;,discord.py,Discord.py,我有这个警告命令,我试图让它显示用户的警告,我试图发出这个命令,每当我尝试启动我的机器人时,它都会说“数据未定义” 这是我的代码: @bot.command() 异步def测试(ctx,用户:discord.Member): 以open(“warns.json”、“r”)作为f: data=json.load(f) user\u data=data[str(user.id)] 打印(f“总警告:{len(用户数据)}”) 对于用户_数据中的警告: warn\u id,mod,reason,tim

我有这个警告命令,我试图让它显示用户的警告,我试图发出这个命令,每当我尝试启动我的机器人时,它都会说
“数据未定义”

这是我的代码:

@bot.command()
异步def测试(ctx,用户:discord.Member):
以open(“warns.json”、“r”)作为f:
data=json.load(f)
user\u data=data[str(user.id)]
打印(f“总警告:{len(用户数据)}”)
对于用户_数据中的警告:
warn\u id,mod,reason,time=warn.values()
打印(f“ID:{warn_ID},mod:{mod},reason:{reason}”)

正如评论中提到的那样:您的代码超出了功能范围

请确保代码缩进正确

试试你的新代码:

@bot.command()
异步def测试(ctx,用户:discord.Member):
以open(“warns.json”、“r”)作为f:
data=json.load(f)
user\u data=data[str(user.id)]
打印(f“总警告:{len(用户数据)}”)
对于用户_数据中的警告:
warn\u id,mod,reason,time=warn.values()
打印(f“ID:{warn_ID},mod:{mod},reason:{reason}”)

使用上下文后,所有代码都不在函数范围内manager@12944qwerty对于
open()
函数,无论文件内容如何读取,都可以在上下文管理器之外引用。因此,
数据
可以在
with
子句外部引用,但它仍然必须在
异步定义test()
函数体内部引用。@JacobLee我知道,这就是我的意思。如果不清楚,很抱歉。只有行
data=json.load(f)
必须位于上下文管理器中。所有其他行,即使它们引用了
数据
,也可以在
with
子句之外。@JacobLee这是正确的方法。如果我理解正确,所有其他表示都会给出错误。如果您减少以下行的缩进,包括
user\u data=data[str(user.id)]
,使它们位于
async def test(…):
,但位于
之外,并将open(…)作为f:
,则不会产生任何错误。只有
data=json.load(f)
需要位于上下文管理器中,而不是整个函数体中。