【问题标题】:Discord.py CheckError every time check is falseDiscord.py CheckError 每次检查为假
【发布时间】:2020-07-28 04:33:35
【问题描述】:

只要检查返回 false,我就会收到此错误:

Ignoring exception in command checkme:
Traceback (most recent call last):
  File "/home/ade/.local/lib/python3.6/site-packages/discord/ext/commands/bot.py", line 892, in invoke
    await ctx.command.invoke(ctx)
  File "/home/ade/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 790, in invoke
    await self.prepare(ctx)
  File "/home/ade/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 744, in prepare
    raise CheckFailure('The check functions for command {0.qualified_name} failed.'.format(self))
discord.ext.commands.errors.CheckFailure: The check functions for command checkme failed.

即使有一个检查,它显然不是检查的其他错误,例如这个基本的 always-false 命令,我得到错误。虽然它实际上并没有干扰代码,但我希望得到一个干净的控制台,可以打印信息/真实错误,并且不会被这个错误阻塞。有没有办法不引发此错误?

def returnfalse(ctx):
    return False

@bot.command(name='testcommand')
@commands.check(returnfalse)
def testcommand(ctx):
    pass

【问题讨论】:

    标签: python python-3.x discord discord.py


    【解决方案1】:

    如果您希望每次都取消检查失败,我建议您设置一个on_command_error 事件。 在主文件中:

    @bot.event
    async def on_command_error(ctx, error):
        if isinstance(error, commands.errors.CheckFailure):
            pass
        else:
            print('Ignoring exception in command {}:'.format(ctx.command), file=sys.stderr)
            traceback.print_exception(type(error), error, error.__traceback__, file=sys.stderr)
    

    一定要导入tracebacksys。您将按预期收到所有其他错误,将通过 CheckFailure。如果你从else 语句中删除printtracebackon_command_error 会吃掉你所有的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 2021-03-04
      • 2018-04-14
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 2014-04-15
      相关资源
      最近更新 更多