使用 discord.py 时在控制台中没有收到错误消息,我如何查看出了啥问题?

Posted

技术标签:

【中文标题】使用 discord.py 时在控制台中没有收到错误消息,我如何查看出了啥问题?【英文标题】:Not getting error messages in the console when working with discord.py, how do I see what's going wrong?使用 discord.py 时在控制台中没有收到错误消息,我如何查看出了什么问题? 【发布时间】:2021-04-29 20:40:36 【问题描述】:

我一直在尝试在 discord.py 中编写一些应用程序,当主代码出现问题时,它会出错,我会前往该部分进行修复。但是我意识到有些事情在没有给我任何消息的情况下一直出错,我该如何获取这些错误?

我注意到子程序中似乎有错误,例如我生成的子程序如下:

task = client.loop.create_task(taskname(ctx))

是那些默默失败的人

如果有人能告诉我如何查看这些“子例程”的错误消息,那将非常有帮助。我不是在寻求有关我的特定代码的帮助,我只是想知道如何查看错误以便我可以帮助自己。提前致谢!

【问题讨论】:

我认为您可能找错地方了,因为它们不是“子例程”,它们是您添加到队列中的任务(您应该在 asyncio 上阅读一下)。他们没有理由默默地出错。如果他们默默地出错,那是因为不同的原因。 对不起,我的意思是任务,当我写这个问题时,正确的术语让我忘记了 【参考方案1】:

您需要一个好的错误处理程序。

错误处理程序是在 Discord 通道或控制台上输出错误的一段代码。 下面是一个例子。

@bot.event
async def on_command_error(ctx, err):
        ' Command on Cooldown '
    if isinstance(err, errors.CommandOnCooldown):
        await ctx.send(f":stopwatch: Command is on Cooldown for **err.retry_after:.2f** seconds.")
        ' Missing Permissions '
    elif isinstance(err, errors.MissingPermissions):
        await ctx.send(f":x: You can't use that command.")
        ' Missing Arguments '
    elif isinstance(err, commands.MissingRequiredArgument):
        await ctx.send(f":x: Required arguments aren't passed.")
        ' Command not found '
    elif isinstance(err, errors.CommandNotFound):
        pass
        ' Any Other Error '
    else:
        ss = get(bot.guilds, id=791553406266245121)
        report = get(ss.text_channels, id=791556612715708448)
        embed = discord.Embed(title='An Error has occurred', description=f'Error: \n `err`', timestamp=ctx.message.created_at, color=242424)
        await report.send(embed=embed)
        print(err)

但如果您使用的是 Cog,情况会略有不同。 下面的例子。

    @commands.Cog.listener()
    async def on_command_error(self, ctx, err):
            ' Command on Cooldown '
        if isinstance(err, errors.CommandOnCooldown):
            await ctx.send(f":stopwatch: Command is on Cooldown for **err.retry_after:.2f** seconds.")
            ' Missing Permissions '
        elif isinstance(err, errors.MissingPermissions):
            await ctx.send(f":x: You can't use that command.")
            ' Missing Arguments '
        elif isinstance(err, commands.MissingRequiredArgument):
            await ctx.send(f":x: Required arguments aren't passed.")
            ' Command not found '
        elif isinstance(err, errors.CommandNotFound):
            pass
            ' Any Other Error '
        else:
            ss = get(self.bot.guilds, id=791553406266245121)
            report = get(ss.text_channels, id=791556612715708448)
            embed = discord.Embed(title='An Error has occurred', description=f'Error: \n `err`', timestamp=ctx.message.created_at, color=242424)
            await report.send(embed=embed)
            print(err)

希望这能解决您的问题祝您有美好的一天!

【讨论】:

我认为它不能解决我的确切问题,但它以另一种方式帮助我,所以谢谢! 你期待什么? 抱歉,我暂时离开了网站。我认为您向我展示的内容需要程序员考虑案例中所有可能的错误,但我想知道是否有可能让它显示任何可能的异常 你可以这样做,所以如果有任何错误,你可以发送一条消息说有错误,并将错误记录在通道和控制台中。 这就是我一直在寻找的,但我将如何在代码中做到这一点?只要我能看到它,我不介意在频道或控制台中

以上是关于使用 discord.py 时在控制台中没有收到错误消息,我如何查看出了啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py 'NoneType' 对象没有属性 'send'

Discord.py - 从错误对象中获取上下文

Discord Bot 响应短语(Discord.py 重写)

在 Discord.py 中添加/删除角色使用控制台输入重写

Discord.py - 机器人不响应命令

为啥我不断收到交互失败 (discord.py)