@chtopisatsuda

Key Error 0, 1 ошибка как решить python?

Выдает ошибку KeyError
Строка кода :
pprint(d.homework()[0][1])
код с методом homework:
def homework(self, datefrom=settings.DATEFROM, dateto=settings.DATETO, studyyear=settings.STUDYYEAR,
                 days: int = 10) -> dict:
        """Method for getting homework"""
        # Checking the correctness of arguments
        if datefrom != settings.DATEFROM or days != 10:
            days_count = datetime.strptime(datefrom, '%d.%m.%Y')
            dateto = (days_count + timedelta(days=days)).strftime("%d.%m.%Y")
        if len(datefrom) != 10 or len(dateto) != 10:
            raise DnevnikError("Invalid dateto or datefrom", "Arguments error")

        # Get homework
        link = settings.HW_LINK.format(self._school, studyyear, datefrom, dateto)
        homework_response = self._main_session.get(link, headers={"Referer": link}).text
        if "Домашних заданий не найдено." in homework_response:
            return {"homeworkCount": 0, "homework": ()}
        last_page = Parser.last_page(homework_response)
        return Parser.get_homework(self, link=link, last_page=last_page, homework_response=homework_response)


функция get_homework:
def get_homework(self, link: str, last_page: Union[str, int], homework_response: str) -> dict:
        """Функция для получения домашних заданий"""
        if last_page is not None:
            subjects = []
            for page in range(1, int(last_page) + 1):
                homework_response = self._main_session.get(link + f"&page={page}", headers={"Referer": link}).text
                for i in Parser.save_content(homework_response, class2='grid gridLines vam hmw'):
                    subject = [i[2], i[0].strip(),
                               " ".join([_.strip() for _ in i[3].split()])]
                    subjects.append(tuple(subject))
            return {"homeworkCount": len(subjects), "homework": tuple(subjects)}
        if last_page is None:
            try:
                subjects = []
                for i in Parser.save_content(homework_response, class2='grid gridLines vam hmw'):
                    subject = [i[2], i[0].strip(),
                               " ".join([_.strip() for _ in i[3].split()])]
                    subjects.append(tuple(subject))
                return {"homeworkCount": len(subjects), "homework": tuple(subjects)}
            except Exception as e:
                raise DnevnikError(e, "DnevnikError")


В каком виде приходят данные с d.homework() :
{'homework': (('Физкультура',
               'Комплекс 1.ОРУ комплекса утренней зарядки (разминки). '
               'Регулярные и систематические самостоятельные занятия ФУ '
               '(физическими упражнениями), подвижными играми, в свободное от '
               'учебных занятий время.',
               'Сегодня 6 урок'),
              ('Обществознание',
               'п3 читаем, отвечаем на все вопросы устно, №4 заполнить таблицу '
               'письменно',
               'Сегодня 7 урок'),
              ('Геометрия', 'теория в тетради', 'Сегодня 8 урок'),
              ('Алгебра', 'п9 №171  178', 'Сегодня 11 урок'),
              ('Алгебра', 'п10 №181  182', 'Сегодня 11 урок'),
              ('Физика', 'П. 14-15 изучить.', 'Сегодня 12 урок'),
              ('Биология',
               '§ 9. Таблица. Стр.43-44- выполните задания письменно в '
               'тетради.',
               '12 октября 2022 8 урок'),
              ('Химия',
               'закончить оформление второй работы в ЛАБОРАТОРНОЙ тетради (см. '
               'прикрепленный файл)',
               '12 октября 2022 9 урок'),
              ('Русский язык', 'П. 19, упр.111', '12 октября 2022 10 урок'),
              ('Литература',
               'выучить отрывок из оды Ломоносова',
               '12 октября 2022 11 урок'),
              ('География',
               'П. 9-10 устно, вопр. 1,3 стр. 46, вопр. 3 стр. 50 письменно.',
               '12 октября 2022 12 урок'),
              ('Физкультура',
               'Комплекс 1.ОРУ комплекса утренней зарядки (разминки). '
               'Регулярные и систематические самостоятельные занятия ФУ '
               '(физическими упражнениями), подвижными играми, в свободное от '
               'учебных занятий время.',
               '13 октября 2022 6 урок'),
              ('Русский язык', 'П. 20, упр.119', '13 октября 2022 7 урок'),
              ('Информатика', '§1.2 учить, РТ№12,15', '13 октября 2022 8 урок'),
              ('Геометрия', 'теория  №92', '14 октября 2022 8 урок'),
              ('Биология', '§ 10. Вопросы на стр.51', '14 октября 2022 9 урок'),
              ('Литература',
               'читать поэму Пушкина "Полтава"',
               '14 октября 2022 11 урок'),
              ('История России.',
               'с 6 параграфа по 7 параграф читать, п6 пересказ, стр 57 '
               'вопросы и задания к тексту материала письменно',
               '17 октября 2022 7 урок'),
              ('История России.',
               'с 6 параграфа по 7 параграф читать, п6 пересказ, стр 57 '
               'вопросы и задания к тексту материала письменно',
               '17 октября 2022 7 урок'),
              ('Алгебра', 'подготовка к кр', '17 октября 2022 9 урок'),
              ('Геометрия', 'СА 6 дидактика', '18 октября 2022 8 урок'),
              ('Алгебра', 'р/о', '18 октября 2022 11 урок'),
              ('Биология',
               '§ 11.  Вопросы на стр.55-56',
               '19 октября 2022 8 урок'),
              ('Химия',
               'оформить и сдать лабораторную тетрадь с двумя работами',
               '19 октября 2022 9 урок'),
              ('Геометрия', 'практическая работа', '21 октября 2022 8 урок')),
 'homeworkCount': 25}


Помогите пожалуйста
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
@NewBoyCow
У тебя приходит словарь, а не список. Получи содержимое по ключу homework, а не по нулевому индексу. Либо сразу возвращай массив без ключа homework.
Т.е. pprint(d.homework()[0][1] замени на pprint(d.homework()['homework'][1]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Если убрать значения, то homework()
Возвращает словарь вида:
{
    'homework' : (
            'какие-то данные',
        ),
     'homeworkCount': 25
}
Какой из двух ключей равен числу 0 которое вы указываете первым: d.homework()[0][1]?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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