Discord bot异步/等待错误处理
Posted
技术标签:
【中文标题】Discord bot异步/等待错误处理【英文标题】:Discord bot async/await in error handling 【发布时间】:2022-01-09 03:20:38 【问题描述】:我对 Python 有点陌生,我一直在尝试了解异步函数的工作原理。话虽如此,我正在尝试使用一些用户输入制作一个 Discord 机器人,以便该机器人显示自定义嵌入。那是容易的部分,因为现在我被困在错误处理上。一旦机器人要求输入,我希望它回问该输入是否不正确或超出范围。
while True:
value = await bot.wait_for("message", check=check, timeout=150.0)
try:
value = int(value.content)
if value > 0 or value < 10:
raise ValueError('A very specific bad thing happened.')
else:
break
except:
ctx.reply("That's not a valid value")
我知道我的错误在于循环内的await
,但我不知道该怎么做。我正在寻找的是机器人再次询问它是否不正确。 _我一直在做很多研究,但我没有发现任何与此相关的东西。提前致谢!
【问题讨论】:
你为什么使用while
循环?做什么的?如果您使用的是discordpy
库,那么它只是一个@client.event async def on_message(message): ...
。然后您可以检查消息内容并向客户端做出响应。如果您发现错误,您还可以在需要时将其文本发送给客户端。
【参考方案1】:
ctx.reply
是一个协程,它前面应该有一个await
。
让命令看起来更好的一种方法是在每次迭代后发送一条消息,以确认您的输入是否不正确,或者是其他错误。
您的代码中还有一个逻辑错误,在if
中。每次输入大于 0 或小于 10 时,它都会引发 ValueError
。这基本上是每次输入整数时。并且由于每次出现错误时都会运行 except 部分,因此这是一个无限循环。
我假设您希望输入不是整数来引发“不是有效值”错误,如果您没有,您可以将 except:
更改为 except ValueError:
以仅在出现 ValueError 时运行。
这是我写的代码
while True:
await ctx.send("Enter a value:")
value = await self.bot.wait_for("message", check=check, timeout=150.0)
try:
value = int(value.content)
if value > 0 and value < 10:
raise ValueError('A very specific bad thing happened.')
else:
break
except:
await ctx.reply("That's not a valid value")
【讨论】:
以上是关于Discord bot异步/等待错误处理的主要内容,如果未能解决你的问题,请参考以下文章
使用 Codeforces API 通过 discord bot (discord.py) 获取有关用户在 CF 问题上的所有 AC 的信息 - python 中的 json 文件处理错误
Discord bot youtube 搜索,等待异步函数的回答
Python36 Discord Bot:任务已被破坏,但处于待处理状态