get_cog不返回已加载的cog,而是返回None

时间:2020-04-19 04:43:25

标签: python discord.py-rewrite

在我的机器人程序中,我有一条命令只会打印出所有已加载齿轮的名称(以及以后的描述)。 对于大多数人来说,它工作得很好,但是似乎有一个名为RNG

的问题
for c in bot.cogs:
    if c is None:
        continue
    else:
        cog_list.append(c)
cog_list = sorted(cog_list)
print(cog_list)
>>> ['General', 'Misc', 'RNG']`  # (all loaded cogs, so this is correct)
for cog in cog_list:
    cog = bot.get_cog(cog.title())
    print(cog)
    >>> <general.General object at [...]>  # 'General' cog
    >>> <misc.Misc object at [...]>        # 'Misc' cog
    >>> None                               # 'RNG' cog, but it's not found? 
                                           # (expected <rng.RNG object at [...]>)

仅显示RNG齿轮已实际加载,这是print(bot.cogs)的输出:

{'General': <general.General object at [...]>, 'Misc': <misc.Misc object at [...]>, 'RNG': <rng.RNG object at [...]>}

我从文档中知道,未找到齿轮时会返回None,但是正如我可以清楚地看到的那样,RNG齿轮已非常重载并且所包含的命令运行正常。

现在,我想知道是否是它的名字,但是对机器人进行help RNG的工作也很好。

有没有办法让get_cog找到我的RNG模块?

1 个答案:

答案 0 :(得分:2)

一些更具描述性的命名可以帮助您了解正在发生的事情

for cog_name in cog_list:
    print(cog_name.title())

打印

General
Misc
Rng

请注意,RNG已成为Rng。这是因为.title()字符串方法使用字符串Title Case构成,其中每个单词都大写。因此,在搜索中,您正在查找Rng并期望它找到RNG,但这不起作用,因为搜索区分大小写。