python: как использовать переменную вместо имени другой переменной - PullRequest
0 голосов
/ 05 марта 2020

(я на мобильном, так что форматирование не очень хорошее)

я работаю над ботом в discord.py и, делая собственную команду помощи, я столкнулся с проблемой доступа к словарям с помощью переменных

вот код, с которым я работаю:

@bot.command()
async def help(ctx, *, tag=None):
    await ctx.trigger_typing()
    if tag == None:
        try:
            ...
            if loaded["utilities"] == True:
                utilities = ""
                for x, y in cmd.utilities.items():
                    utilities = utilities + f"**{x}** - {y}\n"
                help_emb.add_field(name="utility commands", value=utilities, inline=True)
            ...
            # this removed stuff is just stuff for the embed similar to the 'utilities' one above
            ...
            await ctx.send(embed=help_emb)
        except Exception as error:
            await ctx.send("error: {}".format(error))
    else:
        cogcmds = ''
        if tag in tt.cogs and loaded[tag] == True:
            print(f"help command : recognized category ({tag})")
            for x, y in cmd.tag.items():
                cogcmds = cogcmds + f"**{x}** - {y}\n"
                print(cogcmds)
            help_emb = discord.Embed(title=tag, description=cmd.categories[tag])
            help_emb.add_field(name="commands", value=cogcmds, inline=True)
            await ctx.send(embed=help_emb)
        else:
            print(f"help cmd : unknown cmd/category ({tag})")
**my problem:**

проблема в строке 21: "для x, y в cmd.tag.items ():" ожидаемый результат - если (например) 'tag = "test123" ", то программа попытается прочитать" cmd.test123.items "(в основном то, что происходит для поля" служебные команды "в команде), я почти уверен, что это не может быть сделано так, как я это делаю, и, поскольку я относительно новичок в python, я не знаю, как обойти эту проблему, кроме наличия отдельных заранее сделанных операторов для каждого расширения (что глупо)

если это простое исправление, пожалуйста, объясните мне это или дайте мне ресурс, чтобы узнать себя, потому что я слишком глуп, чтобы понимать большие слова программирования

1 Ответ

0 голосов
/ 05 марта 2020

ок, неважно, мне просто нужно было использовать вложенные словари иначе, чем я их делал до

редактирования: особенно так, если кому-то все равно

@bot.command()
async def help(ctx, *, tag=None):
    await ctx.trigger_typing()
    cmds = ''; general = '';
    try:
        if tag == None:
            help_emb = discord.Embed(title=f"trashbot [v{tt.version}] | prefix: '{tt.prefix}'", description=f"for more information, use the *'about'* command", color=tt.pink)
            for x, y in cmd.general.items():
                general = general + f"**{x}** - {y}\n"
            help_emb.add_field(name="⠀__general commands_", value=general, inline=True)
            for cog in tt.cogs:
                if loaded[cog] == True:
                    for cogctg, cmdctg in cmd.commands.items():
                        if cogctg == cog:
                            for x, y in cmdctg.items():
                                cmds = cmds + f"**{x}** - {y}\n"
                    help_emb.add_field(name=f"⠀__{cogctg}__", value=cmds, inline=True)
            help_emb.set_author(name="help menu", icon_url=tt.ico['info'])
        else:
            if tag in tt.cogs and loaded[tag] == True:
                for cogctg, cmdctg in cmd.commands.items():
                    if cogctg == tag:
                        for x, y in cmdctg.items():
                            cmds = cmds + f"**{x}** - {y}\n"
                        help_emb = discord.Embed(title=f"**{cogctg}**", description=cmd.categories[tag], color=tt.pink)
                        help_emb.set_author(name="help menu : category", icon_url=tt.ico['info'])
                        help_emb.add_field(name="⠀__commands__", value=cmds, inline=True)
            else:
                        await ctx.send('> ⚠️ ⠀unknown command category!')
        await ctx.send(embed=help_emb)
    except Exception as error:
        await ctx.send(tt.error.format(error))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...