def parse_status(homework): """Извлекает статус конкретной домашней работы.""" if 'homework_name' not in homework: message = 'В ответе API отсутствует ключ "homework_name"' logger.error(message) send_message(telegram.Bot(token=TELEGRAM_TOKEN), message) raise KeyError(message) else: homework_name = homework['homework_name'] status = homework['status'] if status in HOMEWORK_VERDICTS: try: verdict = HOMEWORK_VERDICTS[status] except KeyError as error: message = f'Не получено значение verdict {str(error)}' logger.error(message) send_message(telegram.Bot(token=TELEGRAM_TOKEN), message) else: return ( f'Изменился статус проверки работы ' f'"{homework_name}". {verdict}' ) else: message = f'Неожиданный статус домашней работы: {status}' logger.error(message) send_message(telegram.Bot(token=TELEGRAM_TOKEN), message) raise ValueError(message) def main(): """Основная логика работы бота.""" global last_check if not check_tokens(): exit() bot = telegram.Bot(token=TELEGRAM_TOKEN) timestamp = int(time.time()) last_check = {} while True: try: response = get_api_answer(timestamp) homework = check_response(response) if len(last_check) == 0: last_check = homework if len(homework) > 0 and len(last_check) > 0: if homework[0]['status'] != last_check[0]['status']: send_message(bot, parse_status(homework[0])) last_check = homework else: message = 'Статус проверки работы не изменился' send_message(bot, message) except Exception as error: message = f'Сбой в работе программы: {str(error)}' logger.error(message) send_message(bot, message) finally: time.sleep(RETRY_PERIOD)