使用 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 Bot 响应短语(Discord.py 重写)