Python 当发生错误时,如何使我的评估发送完整的回溯 @bot.command(name=“eval”) @评估检查() 异步定义评估(ctx,*,cmd): fn_name=“_eval_expr” cmd=cmd.strip(“`”) cmd=“\n”.join(cmd.splitlines()中i的f“{i}”) body=f“异步定义{fn_name}():\n{cmd}” parsed=ast.parse(正文) 正文=已分析。正文[0]。正文 插入返回(正文) 环境={ “bot”:ctx.bot, "不和":不和,, “命令”:命令, “ctx”:ctx, “\uuuuu导入”:\uuuu导入__ } exec(编译(已解析,filename=”“,mode=“exec”),env) 结果=(等待评估(f“{fn_name}()”,env)) embed=discord.embed(title=“Success!”,description=f“``py\n{result}`````”,color=discord.color(0x00ff6a)) 等待ctx.send(嵌入=嵌入)
这是我的评估,我希望它在发生错误时发送完整的回溯。。Python 当发生错误时,如何使我的评估发送完整的回溯 @bot.command(name=“eval”) @评估检查() 异步定义评估(ctx,*,cmd): fn_name=“_eval_expr” cmd=cmd.strip(“`”) cmd=“\n”.join(cmd.splitlines()中i的f“{i}”) body=f“异步定义{fn_name}():\n{cmd}” parsed=ast.parse(正文) 正文=已分析。正文[0]。正文 插入返回(正文) 环境={ “bot”:ctx.bot, "不和":不和,, “命令”:命令, “ctx”:ctx, “\uuuuu导入”:\uuuu导入__ } exec(编译(已解析,filename=”“,mode=“exec”),env) 结果=(等待评估(f“{fn_name}()”,env)) embed=discord.embed(title=“Success!”,description=f“``py\n{result}`````”,color=discord.color(0x00ff6a)) 等待ctx.send(嵌入=嵌入),python,discord,discord.py,Python,Discord,Discord.py,这是我的评估,我希望它在发生错误时发送完整的回溯。。 我怎样才能做到这一点,甚至可能做到这一点呢?为什么要使用eval?您正在对fn\u name的值进行硬编码,因此只需定义一个名为\u eval\u expr的函数并完成它。 @bot.command(name="eval") @eval_check() async def eval_(ctx, *, cmd): fn_name = "_eval_expr" cmd = cmd
我怎样才能做到这一点,甚至可能做到这一点呢?为什么要使用
eval
?您正在对fn\u name
的值进行硬编码,因此只需定义一个名为\u eval\u expr
的函数并完成它。
@bot.command(name="eval")
@eval_check()
async def eval_(ctx, *, cmd):
fn_name = "_eval_expr"
cmd = cmd.strip("` ")
cmd = "\n".join(f" {i}" for i in cmd.splitlines())
body = f"async def {fn_name}():\n{cmd}"
parsed = ast.parse(body)
body = parsed.body[0].body
insert_returns(body)
env = {
'bot': ctx.bot,
'discord': discord,
'commands': commands,
'ctx': ctx,
'__import__': __import__
}
exec(compile(parsed, filename="<ast>", mode="exec"), env)
result = (await eval(f"{fn_name}()", env))
embed = discord.Embed(title="Success!", description=f"```py\n{result}```", color = discord.Color(0x00ff6a))
await ctx.send(embed=embed)