Ошибки и исключения · 15 из 15
Все ошибки разом
Тамара Ивановна переносит карточки пациентов из старой программы: выгрузка — строки «фамилия;год рождения;полис». В прошлый раз загрузка падала на первой кривой строке: Тамара Ивановна исправляла её, запускала снова — и программа падала на следующей. Сорок запусков за вечер. Теперь ей нужны все ошибки разом, у каждой — номер строки, а где строку погубила чужая ошибка (год не разобрался числом) — и исходная причина: её посмотрит программист.
Что сделать
Разберите выгрузку в карточки, а если есть кривые строки — поднимите одну группу со всеми их ошибками сразу.
Что приходит
stroki— строки выгрузки «фамилия;год;полис»
Что вернуть
Список карточек, если все строки годятся; иначе — ExceptionGroup("карточки с ошибками", [...]) с ошибками строк вместо ответа.
Допишите функцию zagruzit в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
Две хорошие строки дают две карточки: "Иванова; 1985 ;1234567890123456" — {"familiya": "Иванова", "god": 1985, "polis": "1234567890123456"}. Будь вторая строка "Петров;19x0;…", ответа не было бы вовсе: поднялась бы группа с ошибкой OshibkaStroki номер 2 «год не число», причина которой — ValueError от int.
zagruzit(["Иванова; 1985 ;1234567890123456", "Петров;1990;6543210987654321"])
[{'familiya': 'Иванова', 'god': 1985, 'polis': '1234567890123456'}, {'familiya': 'Петров', 'god': 1990, 'polis': '6543210987654321'}]
Строка — три поля через ;, пробелы по краям полей отбрасываются: фамилия, год рождения, номер полиса. Карточка — словарь {"familiya": …, "god": …, "polis": …}, год — целым числом.
Ошибки строки, проверяются по порядку — первая найденная и есть ошибка строки:
- полей не три — «нужно три поля»;
- год не разбирается
int— «год не число»; причина ошибки (__cause__) — тотValueError, что бросилint, поэтому поднимайте её черезraise … from …; - год вне 1900–2026, концы входят, — «год вне 1900–2026»;
- полис не ровно 16 цифр — «полис — 16 цифр».
Ошибка строки — экземпляр класса OshibkaStroki, который вы заводите сами: наследник ValueError, у экземпляра поле nomer — номер строки с единицы, а текст (str(ошибка)) — описание из списка.
Все строки хороши — верните список карточек по порядку. Есть хоть одна ошибка — поднимите ExceptionGroup("карточки с ошибками", ошибки), ошибки — по порядку строк. Часть карточек при этом не возвращается.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.