You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:17:33