Python 3.6环境下Discord Bot出现async def语法错误求助
解决Discord机器人on_message方法的SyntaxError问题
嘿,我来帮你排查这个问题!你的代码在自己电脑能正常运行,但学校Mac上报错,主要有两个可能的原因,咱们一步步来解决:
1. 代码缩进格式出问题了
Python对缩进的要求特别严格,你贴的代码里async def定义方法后,后面的if语句完全没有正确缩进,直接跟在同一行或层级混乱,这肯定会触发SyntaxError。正确的写法应该是这样的:
async def on_message(self, message): if not message.author.bot: ctx = await bot.get_context(message) await self.invoke(ctx)
划重点:
- 方法定义的下一行开始,所有内部代码都要缩进4个空格(或者用制表符,只要整个文件保持统一格式就行)
if语句块里的两行代码还要再缩进一层,保证代码块的层级清晰
2. 学校Mac的Python版本可能搞混了
从错误信息里的路径能看到,你的学校电脑同时装了Python3.6和3.7,还有可能默认的python命令指向的是Python2.x——而Python2根本不支持async def这种异步语法,这也会导致报错。
你可以在终端里先确认下当前用的Python版本:
python --version
如果显示是Python2.x,那你得指定用Python3.6来运行脚本:
python3.6 -u "/Users/dorian/Desktop/ISN/ISNbotv2/bot.py"
额外的小提醒
对了,在Discord.py里重写on_message方法的时候,记得要加上await super().on_message(message),不然默认的命令处理逻辑可能会失效(除非你完全想自己处理所有消息)。完整的方法可以改成这样:
async def on_message(self, message): if not message.author.bot: ctx = await bot.get_context(message) await self.invoke(ctx) # 调用父类的方法,保证机器人的默认功能正常工作 await super().on_message(message)
应该这样就能解决你的问题啦!
内容的提问来源于stack exchange,提问作者Misubata
相关产品推荐
相关产品推荐

