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

Discord机器人加载cogs目录子文件夹命令时出现ExtensionNotFound错误咨询

错误原因
  1. 模块路径格式不符合要求
    discord.py的load_extension方法要求传入Python标准的模块导入路径,必须用.分隔目录层级,不能使用文件系统的斜杠/反斜杠。你当前代码处理后生成的路径为cogs.commands\\general\\help,混合了点和Windows反斜杠(反斜杠还会触发转义逻辑),完全无法被Python识别为合法模块路径。
  2. 缺少Python包标识文件
    所有需要被作为模块导入的目录,都需要在目录下放置一个空的__init__.py文件来标记为Python包。你需要确认cogs/、cogs/commands/、cogs/commands/general/三级目录下都有该文件。
  3. 路径截取逻辑硬编码易出错
    你写的py_file[5:-3]是硬编码截取路径的前5位,仅在特定路径长度下生效,一旦目录层级、路径分隔符发生变化,就会出现截取错误。

你的文件夹结构参考:
文件夹结构

解决方案

步骤1:补全包标识文件

在cogs/、cogs/commands/、cogs/commands/general/每个目录下,新建一个空白的__init__.py文件。

步骤2:替换加载逻辑代码

使用更健壮的递归遍历逻辑,自动处理路径转换,无需手动写多层循环,兼容全平台:

from pathlib import Path

# 递归遍历cogs目录下所有.py后缀的文件
for py_file in Path("cogs").rglob("*.py"):
    # 跳过不需要加载的__init__.py文件
    if py_file.name == "__init__.py":
        continue
    # 将文件路径转换为标准模块导入格式:例如cogs/commands/general/help.py 转为 cogs.commands.general.help
    module_path = py_file.as_posix().replace("/", ".").removesuffix(".py")
    try:
        client.load_extension(module_path)
        print(f"加载成功:{module_path}")
    except Exception as e:
        print(f"加载失败[{module_path}]:{str(e)}")

这段代码会自动处理所有层级的子目录cog加载,不需要你手动调整遍历层数,也不会出现路径分隔符的转义错误,额外的异常捕获还能帮你定位cog内部代码错误导致的加载失败问题。

内容的提问来源于stack exchange,提问作者lolnoob lolnooa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 21:45:03