Троичное выражение Python: «ничему не присваивается»

#python #asynchronous #discord.py

#python #асинхронное #discord.py

Вопрос:

Это мой код:

 @bot.command()
async def online(ctx):
    """Fetch all members and add to list based on status"""
    onlinemembers, offlinemembers = [], []
    # Loop over individual member in guild.members list
    for m in ctx.guild.members:
        # Add to list of online members if status is online or dnd, else add to offline list
        onlinemembers.append(str(m)) if str(m.status) in ['online', 'dnd'] else offlinemembers.append(str(m))
    await ctx.send(f"Online members: {', '.join(onlinemembers)}nOffline members: {', '.join(offlinemembers)}")
  

Это работает так, как задумано.
Перед использованием троичного выражения я сделал что-то вроде этого:

         ...
        if str(member.status) in ['online', 'dnd']:
            onlinemembers.append(str(member))
        else:
            offlinemembers.append(str(member))
        ...
  

Которое также отлично работало, но я хотел написать его короче.

Верхний код выдает мне эту ошибку в компоновщике: Expression "onlinemembers.append(str(m)) if str(m.status) in ['online', 'dnd'] else offlinemembers.append(str(m))" is assigned to nothing

Как я могу сделать что-то подобное без появления такой ошибки?

Комментарии:

1. Верно, результат условного выражения (всегда None) не присваивается. У вас есть выражение для его побочного эффекта, который является дурным тоном. Почему бы и нет, например (onlinemembers if str(m.status) in ("online", "dnd") else offlinemembers).append(str(m)) ?

2. Аааа, понятно. Я мог бы сделать что-то вроде L = l1 if x else l2 L.append(y) но ваше решение намного лучше. Спасибо!