@Xlebabas

Пишу телеграм бота на пайтон и вылезает ошибка KeyError: 'recipes'. Как решить?

import logging

from aiogram import Bot, Dispatcher, types , executor 
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from Strav import Strav

bot_token = "7031913592:AAHieu-8VwiQJcfAkCgM-etkXLj8AaMLhEY"
logging.basicConfig(level=logging.INFO)
bot = Bot(token=bot_token)
dp = Dispatcher(bot, storage=MemoryStorage())

async def set_deffault_commands(dp):
    await bot.set_my_commands(
        [
            types.BotCommand("start","Запуск бота")
        ]
    )

@dp.message_handler(commands="start")
async def start(massage: types.Message):
    food_choise = InlineKeyboardMarkup()
    for food in Strav: 
        button = InlineKeyboardButton(text=food, callback_data=food)          
        food_choise.add(button)
    await massage.answer(text="Привіт! Я ваш помічник по приготуваню страв.\nОберить страву:",  reply_markup=food_choise)

@dp.callback_query_handler()
async def get_food_info(callback_query: types.CallbackQuery):
  if callback_query.data in Strav.keys():
 #   breakpoint()
    await bot.send_photo(callback_query.message.chat.id, Strav[callback_query.data]["photo"])
    Name = Strav[callback_query.data]["name"]
    Grams = Strav[callback_query.data]["grams"]
    Recipe = Strav[callback_query.data]["recipes"]
  else:
      await bot.send_message(callback_query.message.chat_id, "Страви поки немає ")

async def on_startup(dp):
    await set_deffault_commands(dp)

if __name__ == "__main__":
    executor.start_polling(dp, on_startup=on_startup)
второй код : 
Strav = {
    "Плов": {
        
        "photo": "https://i.pinimg.com/564x/e7/ba/b7/e7bab70b2e98b202c16278a6b6f4b089.jpg",
        "name": "Плов з телятини ",
        "grams": "500 г телятини (лопатки або голяшки) \n250 г рису (басмати або круглого) \n2 моркви \n1 цибулина \n2 зубчики часнику \n100 г родзинок (за бажанням) \n 50 г вершкового масла \n2 ст. л. рослинного масла \n1 ч. л. барбарису \n1 ч. л. зіри (кумину) \n1/2 ч. л. куркуми \n1/2 ч. л. меленого коріандру \nСіль і перець за смаком \nВода",
        "recipes": "Приготування:\n Підготуйте м'ясо: Наріжте телятину кубиками середнього розміру. Промийте рис і замочіть його в холодній воді на 30 хвилин. Очистіть моркву, цибулю і часник. Моркву наріжте соломкою, а цибулю - кубиками. Часник подрібніть.\n Обсмажте м'ясо: У казані розігрійте рослинне масло. Додайте телятину і обсмажте її на сильному вогні до золотистого кольору.\n Додайте овочі: Додайте до м'яса цибулю і обсмажте її до м'якості. Потім додайте моркву і обсмажте ще 5 хвилин.\n Додайте спеції: Додайте барбарис, зіру, куркуму, коріандр, сіль і перець. Перемішайте і тушкуйте 5 хвилин.\n Додайте рис: Злийте воду з рису і додайте його до казана. Залийте водою, щоб вона покривала рис на 2-3 см вище. Додайте родзинки (за бажанням).\n Додайте часник: Додайте часник, не розбираючи на зубчики.\n Доведіть до кипіння, зменшіть вогонь, накрийте кришкою і тушкуйте на повільному вогні 40-45 хвилин, доки рис не вбере всю воду. \nЗніміть з вогню, дайте настоятися 10 хвилин і перемішайте. \nПодавайте плов гарячим, посипавши свіжою зеленню (за бажанням)."        
        },   
    "Бургер": {
         "photo": "https://i.pinimg.com/564x/3c/ae/99/3cae993f8228014b38b1374f33108eab.jpg",
        "name": "Домашній бургер",
        "grams": "Для булочок: \n500 г борошна \n500 г борошна \n250 мл теплого молока \n1 яйце \n50 г вершкового масла \n50 г цукру \n10 г солі \n10 г сухих дріжджів \nДля котлети: \n500 г яловичого фаршу \n1 цибулина \n1 яйце \n2 скибочки хліба \n100 мл молока \nСіль і перець за смаком \nДля начинки: \nСир \nПомідор \nОгірок \nЛистовий салат \nСоус за смаком (кетчуп, майонез, гірчиця)",
        "recipes": "Булочки: \n1. Розчиніть дріжджі в теплому молоці з цукром. Залиште на 10 хвилин. \n2. Додайте яйце, розтоплене вершкове масло, сіль і борошно. \n3. Замісіть тісто. \n4. Залиште тісто в теплому місці на 1 годину. \n5. Розділіть тісто на 8 частин. \n6. Сформуйте булочки. \n7. Викладіть булочки на деко, застелене пергаментним папером. \n8. Випікайте булочки в розігрітій до 180°C духовці 20-25 хвилин. \nКотлета: \n1. Замочіть хліб у молоці на 5 хвилин. \n2. Пропустіть через м'ясорубку яловичий фарш, цибулю, віджатий хліб. \n3. Додайте яйце, сіль і перець за смаком. \n4. Добре перемішайте фарш. \n5. Сформуйте котлети. \n6. Обсмажте котлети на сковороді з рослинним маслом до готовності. \nЗбирання бургера: \n1. Розріжте булочки навпіл. \n2. На нижню половинку булочки покладіть лист салату. \n3. Додайте котлету. \n4. Зверху покладіть помідор, огірок, сир і соус за смаком. \n5. Накрийте верхньою половинкою булочки."
        },
    "Сендвіч з тунцем":   {
        "photo": "https://i.pinimg.com/564x/ec/2d/68/ec2d68ac23f7b462c9c46a8475312f8e.jpg",
        "name": "Сендвіч з тунцем",
        "grams": "2 скибочки хліба \n1 банка консервованого тунця у власному соку \n1/4 склянки майонезу \n1 столова ложка гірчиці \n1/4 склянки нарізаної зеленої цибулі \n1/4 склянки нарізаної червоної цибулі \n1 стебель селери, нарізаний \n1/4 чайної ложки солі \n1/4 чайної ложки меленого чорного перцю",
        "recipes": "1. Змішайте тунець, майонез, гірчицю, зелену цибулю, червону цибулю, селера, сіль і перець у мисці \n2. Рівномірно розподіліть тунцову суміш по скибочкам хліба. \n3. Сендвіч готовий до вживання!"
        }
}
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
сначала учим основы python, только потом пишем ботов
Ответ написан
Комментировать
@melmanoner
Во-первых, перевыпусти токен бота, ты его зачем то засветил, так делать не стоит.
Во-вторых, ошибки в этом коде лично я не увидел. Запустил у себя код все отработало как положено. Лог ошибки указывает на ключ recipes, возможно где -то случайно нажал и добавил или удалил символ в ключе.
Пришли полный лог ошибки, там должны быть указаны конкретный файл и строчка.
Я полагаю, что ошибка в ключе recipes именно в файле Strav, так как если бы ты ошибся в этой строчке
Recipe = Strav[callback_query.data]["recipes"] # например Recipe = Strav[callback_query.data]["recipe"]

То ошибка была KeyError: 'recipe' . В твоем случае ищи ошибку в слове recipes в файле Strav
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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