@bifronte
учусь

Почему не могу указать элемент из списка как аргумент?

Доброго времени суток! Делаю телеграмм бота и мне нужно собрать media группу. После обновления на версию aiogram 3.1.1 увидел удобный как казалось метод .add. В него я собирался передовать в качестве type=ключ из словаря{'photo': '...' 'video': '...' 'document': '...'}, а в media уже как раз значения этих ключей, caption - там просто текст как вроде бы и надо.
for key in post_data.keys():

            if post_data.get('text'):
                album.add(type=f'{key}', media=post_data[f'{key}'], caption=post_data['text'])
                post_data['text'] = None
            else:
                album.add(type=key, media=post_data[f'{key}'])

Но при попытке создать сам album происходить ошибка: ValueError: Unknown media type: 'text'
Но если в каждом из аргументов я укажу просто значение:
for key in post_data.keys():

            if post_data.get('text'):
                album.add(type='photo', media='photo', caption='text')
                post_data['text'] = None
            else:
                album.add(type=key, media=post_data[f'{key}'])

То оно будет работать.
Вопрос в том чего я недопонимаю или чего не дочитал в документации? И можно ли в итоге будет сделать как я планировал?
  • Вопрос задан
  • 25 просмотров
Пригласить эксперта
Ответы на вопрос 1
@codingoleg
Не могу конкретно по aiogram сказать, но ваши 2 кода различны. Не совсем понятно, что вы хотите сделать. Несколько предположений:
1. caption=post_data['text'] и caption='text' не эквивалентны. Первое - это значение по ключу 'text', а второе, видимо, сам ключ 'text' (вы не написали, что в словаре). Ошибка может быть из-за того, ему не нравится то, что по ключу 'text' в словаре.
2. Условие if post_data.get('text') выполнится сразу же, если в словаре в принципе есть ключ 'text' и только 1 раз (или ни разу, если 'text' не в словаре), потому что ключ 'text' будет заменен на None этой строкой post_data['text'] = None. Словарь теперь содержит {..., 'text': None}. Если вы хотите другое поведение, вам нужно другое условие.
3. Используйте key, value - так понятнее будет. Пример:
post_data = {'photo': 'some_photo', 'video': 'some_video', 'text': 'some_text'}
for key, value in post_data.items():
    if post_data.get('text'):
        album.add(type=key, media=value, caption=post_data['text'])
        post_data['text'] = None
    else:
        album.add(type=key, media=value)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы