discord.py-rewrite-通过齿轮处理异常

时间:2019-05-02 22:13:56

标签: discord discord.py discord.py-rewrite

因此,在主文件[0, 3] [3, 6] [2+4, 5+4] [1+4+4, 4+4+4] 上,我有:

bot.py

现在我还有一个cog文件,有时我想在其中抛出class Bot(commands.Bot): # BOT ATTRIBUTES class MyException(Exception): def __init__(self, argument): self.argument = argument bot = Bot(...) @bot.event async def on_command_error(ctx, error): if isistance(error, bot.MyException): await ctx.send("{} went wrong!".format(error.argument)) else: print(error) 异常:

Bot().MyException

运行代码时,如果class Cog(commands.Cog): def __init__(self, bot): self.bot = bot @commands.command() async def a_command(self, ctx): if a_condition: raise self.bot.MyException("arg") 已通过验证,则程序会引发a_condition异常,但是BOT不会在{的MyException函数中发送所需的消息{1}}。相反,该异常会在控制台中打印,并且我收到此错误消息:

on_command_error()

有人可以告诉我如何让BOT在bot.py的{​​{1}}中说出所需的消息吗?

2 个答案:

答案 0 :(得分:1)

命令将仅引发从CommandError派生的异常。当您的命令引发非CommandError异常时,它将包装在CommandInvokeError中:

@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.CommandInvokeError):
        if isinstance(error.original, bot.MyException):
            await ctx.send("{} went wrong!".format(error.argument))
            return
    print(error)

答案 1 :(得分:0)

@Patrick Haugh非常感谢您提供此信息,我设法通过继承MyException而不是commands.CommandError的{​​{1}}类来解决此问题。

基本上是这样写的:

Exception

代替:

class MyException(commands.CommandError):
        def __init__(self, argument):
            self.argument = argument

然后离开:

class MyException(Exception):
        def __init__(self, argument):
            self.argument = argument