【问题标题】:Discord.py - Optional ArgsDiscord.py - 可选参数
【发布时间】:2021-05-12 17:46:55
【问题描述】:

我在设置带有可选 Arg 的命令以重新加载我的 cog 时遇到问题。它告诉我该命令不存在,并且经过一些修改后,即使我将 arg 用于特定的 cog,它也会重新加载所有参数。目前它正在尝试重新加载一个名为 None 的 cog。

我的代码:

@commands.has_role("Founder")
@bot.command()
async def reload(ctx, extension=None):
    if  ctx.channel.name == ("dev-testing") and {extension} == None:
        for filename in os.listdir('./cogs'):
            if filename.endswith('.py'):
                bot.unload_extension(f'cogs.{filename[:-3]}')
                bot.load_extension(f'cogs.{filename[:-3]}')
                await ctx.send("All cogs have been reloaded!")
                print(bcolors.WARNING + "All cogs have been reloaded!" + bcolors.ENDC)
        

    elif ctx.channel.name == ("dev-testing") and {extension} != None:
            bot.unload_extension(f'cogs.{extension}')
            bot.load_extension(f'cogs.{extension}')
            await ctx.send(f'{extension} has been reloaded!')
            print(bcolors.WARNING + f'{extension} has been reloaded!' + bcolors.ENDC)

这是我没有指定参数时得到的错误。

discord.ext.commands.errors.ExtensionNotLoaded: Extension 'cogs.None' has not been loaded.

我对此进行了多次修改以使其正常工作,但它仍在尝试加载 arg 的默认值。我什至尝试不使用默认值,尝试使用 NULL,尝试了各种方法,但似乎无法正常工作。

任何帮助将不胜感激。

【问题讨论】:

    标签: python discord.py


    【解决方案1】:

    为什么要这样比较?

    if {extension} != None:
    

    将它放在大括号内时,您将其转换为集合,集合永远不会是None,只需这样做:

    if extension is not None:
    

    【讨论】:

    • 我不知道使用大括号会强制转换为一组。经过大量谷歌搜索以寻找答案并试图找到解决方案后,我找不到任何有效的方法,所以我决定继续自己尝试,我发布的代码是我在这里寻求指导之前的最后一次修订。我尝试删除括号,它正在重新加载所有齿轮,但不再是特定的,但也不再在控制台中抛出 stderror。
    • 这很奇怪,你能不能尝试在elif 语句之后添加一个打印?
    • 这是我在 if elif 语句中放置 not 的错误。现在一切似乎都在正常工作。谢谢!我将更多地研究 Python 中的集合转换,以便更好地了解它是如何工作的。
    • 有集合和字典用相同的花括号表示,区别在于字典是键值对,即{"key1": "value1", "key2": "value2"}。一个集合它只是一个无序和无索引的列表{'value1', 'value2'}
    猜你喜欢
    • 2020-10-04
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多