discord.py机器人触发错误时对应except块不运行,如何解决?
错误捕获失败的核心原因
你当前编写的try代码块仅执行了两个操作:将iters转为整数赋值给MAX_ITER、定义mandelbrot函数,没有实际调用mandelbrot函数。mandelbrot函数内部运行时抛出的异常属于函数调用阶段的运行时错误,不会被定义函数时的外层try...except捕获,因此无法触发你写的错误处理分支。
修复方案
- 将
mandelbrot函数的定义移到try块外部,函数定义过程本身不会抛出你需要捕获的ValueError、IndexError这类运行时错误,放在异常捕获块中没有意义。 - 在
try块内部执行mandelbrot函数的调用逻辑,函数运行时的异常才能被对应的except分支捕获。 - 补充通用异常分支的消息发送代码,你当前的通用
Exception捕获分支只构造了Embed对象,没有执行await status.edit发送消息,即使走到该分支也不会推送错误提示。 - 如果你启用了discord.py的全局
on_command_error事件,要确认该事件不会吞掉当前逻辑抛出的异常,否则需要调整全局错误处理的优先级。
修改后的参考代码
import cmath import discord # 提前定义分形计算函数 def mandelbrot(c, start, brakeoff, max_iter, power): z = complex(float(start[0]), float(start[1])) n = 0 while abs(z) <= float(brakeoff) and n < max_iter: z = z ** complex(float(power[0]), float(power[1])) + c n += 1 return n # 异常捕获逻辑放在业务流程处 try: MAX_ITER = int(iters) # 此处填写你调用mandelbrot计算、生成分形的业务逻辑 # 示例调用:计算单个点的结果 point_result = mandelbrot(your_complex_c, start, brakeoff, MAX_ITER, power) # 后续正常渲染、发图逻辑 except ValueError: valueerror = discord.Embed(title = "`ValueError` 触发,请确认数字输入位置没有输入字母或文字") valueerror.set_author(name = "错误", icon_url = "https://cdn.discordapp.com/emojis/848700721113333780.png?v=1") await status.edit(content="", embed=valueerror) except IndexError: indexerror = discord.Embed(title = "`IndexError` 触发,请确认多分量输入没有缺漏参数") indexerror.set_author(name = "错误", icon_url = "https://cdn.discordapp.com/emojis/848700721113333780.png?v=1") await status.edit(content="", embed=indexerror) except ZeroDivisionError: zerodivisionerror = discord.Embed(title = "`ZeroDivisionError` 触发,当前暂不支持负数或复数指数") zerodivisionerror.set_author(name = "错误", icon_url = "https://cdn.discordapp.com/emojis/848700721113333780.png?v=1") await status.edit(content="", embed=zerodivisionerror) except Exception as error: error_embed = discord.Embed(title = f"未定义错误触发,Python错误信息:||{str(error)}||") error_embed.set_author(name = "错误", icon_url = "https://cdn.discordapp.com/emojis/848700721113333780.png?v=1") await status.edit(content="", embed=error_embed)
内容的提问来源于stack exchange,提问作者Deseptor
相关产品推荐
相关产品推荐

