#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)
но ваше решение намного лучше. Спасибо!