Discord机器人.ud命令异常:无定义词汇未处理且报错
嘿,这问题我熟!你的Discord机器人.ud命令在查不到Urban Dictionary定义时没反馈还抛异常,核心原因就是没处理「无结果」和异常情况。咱一步步来修复:
问题根源
从你给出的Traceback来看,当urbandictionary_top查不到对应词汇时,要么返回了空列表/空值,要么直接抛出了异常,但你的代码没做任何判断和捕获,导致机器人卡壳还报错。
具体修复方案
给你的命令加上输入校验、结果判断和异常捕获就行,我给你写个示例代码,你可以直接套进去:
import discord from urbandictionary_top import urban_top client = discord.Client(intents=discord.Intents.default()) # 注意:Discord新版本需要配置Intents @client.event async def on_message(message): # 忽略机器人自己的消息,避免循环 if message.author == client.user: return if message.content.startswith('.ud'): # 提取用户要查询的词汇 query_term = message.content[4:].strip() # 先校验用户是否输入了词汇 if not query_term: await message.channel.send("要查啥词呀?格式是 `.ud [词汇]` 哦~") return try: # 调用工具查询定义 def_results = urban_top(query_term) # 检查是否有返回结果 if not def_results: await message.channel.send(f"抱歉哦,没找到 `{query_term}` 的Urban Dictionary定义😢") return # 取排名第一的定义来发送 top_result = def_results[0] reply_content = ( f"**{query_term}**\n" f"{top_result['definition']}\n\n" f"*例句:* {top_result['example']}" ) await message.channel.send(reply_content) # 捕获所有可能的异常(网络问题、工具内部报错等) except Exception as err: # 控制台记录错误,方便你排查问题 print(f".ud命令出错: {err}") # 给用户友好提示 await message.channel.send("查询出问题啦,麻烦稍后再试一下~")
关键修复点
- 输入校验:先判断用户有没有输入词汇,避免空查询
- 结果判断:检查
urban_top返回的结果是否为空,空的话直接给用户反馈 - 异常捕获:用
try-except包裹查询逻辑,不管是工具报错还是网络问题,都能给用户提示,同时在控制台记录错误方便你调试 - 忽略自身消息:避免机器人自己触发命令导致循环
这样改完之后,不管用户查的词有没有定义,机器人都会给明确的反馈,再也不会悄咪咪抛异常啦!
内容的提问来源于stack exchange,提问作者Mehvix
相关产品推荐
相关产品推荐

