discord.py-rewrite - 通过 cogs 处理异常
discord.py-rewrite - Manipulating exceptions through cogs
所以,在我的主文件 bot.py
上,我有:
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)
现在我还有一个 cog 文件,有时我想在其中抛出 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
已经验证,程序会引发 MyException
异常,但 BOT 不会在 on_command_error()
bot.py
中的函数。相反,异常会打印在控制台中,我收到此错误消息:
Command raised an exception: MyException: arg
谁能告诉我如何让 BOT 在 on_command_error()
中说出想要的消息 bot.py
?
命令只会引发源自 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)
@Patrick Haugh 非常感谢您提供此信息,我设法通过从 commands.CommandError
而不是 Exception
继承 MyException
class 来解决这个问题。
基本上是这样写的:
class MyException(commands.CommandError):
def __init__(self, argument):
self.argument = argument
而不是:
class MyException(Exception):
def __init__(self, argument):
self.argument = argument
然后离开:
@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.py
上,我有:
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)
现在我还有一个 cog 文件,有时我想在其中抛出 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
已经验证,程序会引发 MyException
异常,但 BOT 不会在 on_command_error()
bot.py
中的函数。相反,异常会打印在控制台中,我收到此错误消息:
Command raised an exception: MyException: arg
谁能告诉我如何让 BOT 在 on_command_error()
中说出想要的消息 bot.py
?
命令只会引发源自 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)
@Patrick Haugh 非常感谢您提供此信息,我设法通过从 commands.CommandError
而不是 Exception
继承 MyException
class 来解决这个问题。
基本上是这样写的:
class MyException(commands.CommandError):
def __init__(self, argument):
self.argument = argument
而不是:
class MyException(Exception):
def __init__(self, argument):
self.argument = argument
然后离开:
@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)