因此,在主文件[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}}中说出所需的消息吗?
答案 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