【问题标题】:No module named 'cog' discordpy没有名为“cog”的模块不和谐
【发布时间】:2021-05-18 13:32:57
【问题描述】:

我在尝试加载 cogs 时收到此错误消息:

parent = import(parent_name, fromlist=['path']) ModuleNotFoundError: 没有名为“cog”的模块

代码:

COGS = [path.split("\\")[-1][:-3] for path in glob("./cogs/*.py")]

client = commands.Bot(command_prefix="!", case_insensitive=True)

for cog in COGS:
    print(f"loading cog... {cog}")
    client.load_extension(f"cogs.{cog}")

任何想法为什么?谢谢!

【问题讨论】:

  • COGS = [path.split("\\")[-1][:-3] for path in glob("./cogs/*.py")这里要搜索当前目录还是父目录的.py文件?
  • 我真的想通了!我会发布答案

标签: python discord discord.py


【解决方案1】:

我很高兴你想通了,但是如果你想让你的代码在任何平台上工作,并且省去指定分隔符和切片的麻烦,你可以使用 Python 的 pathlib 模块,它可以做很多事情cleaner and more convenient.

from pathlib import Path

cogs = [path.stem for path in Path('cogs').glob('*.py')]
  • Path('cogs')(或等价的 Path('./cogs'))创建一个代表您的 cogs 文件夹的 Path 对象。
  • 这个 Path 对象有一个 glob 方法,它返回代表每个匹配文件的 Path 对象。 (注意:您不需要为此导入 glob 模块;它是 Path 对象的一部分。)
  • 路径对象具有方便的属性,例如 name ('cog.py')、extension ('.py') 和 stem ('cog')。

pathlib 在这一点上(2014 年)已经有几年的历史了,并且包含在标准的 Python 发行版中,但是那里的很多教程和食谱还没有跟上。它可以使您的代码更加简洁、可移植且更易于修改。

(特别是,您始终使用正斜杠指定Path() 的路径,它会自动处理不同平台所需的分隔符转换。)

【讨论】:

    【解决方案2】:

    好的,我想通了,希望这能帮助解决这个问题的人。

    对于 Windows,目录分隔符是 2 个反斜杠。但对于 Linux,1 个正斜杠。

    所以,我将这一行改为:

    COGS = [path.split("\\")[-1][:-3] for path in glob("./cogs/*.py")]
    

    到这里:

    COGS = [path.split("/")[-1][:-3] for path in glob("./cogs/*.py")]
    

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 2018-09-27
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2017-11-12
      • 2019-03-28
      • 1970-01-01
      • 2021-06-29
      相关资源
      最近更新 更多