Перейти к содержанию

412 уроков, 25 библиотек и челлендж «Что выведет код?» — бесплатно, код прямо в браузере

Начать обучение

Исключения в Python: try, except и raise с нуля — интерактивный курс (20 уроков)

Программа падает красиво: лови, бросай и создавай свои исключения

Редакция Питоники

20 уроков ≈ 10–14 часов Начальный Бесплатно и без регистрации
Исключения: интерактивные уроки с запуском кода в браузере

Ошибка — это не крах программы, а сообщение с именем. Исключение можно поймать, разобрать, выбросить своё и даже построить из него цепочку. Программы, которые переживают плохой ввод, недоступный файл и пустой словарь, написаны именно на try/except.

Двадцать уроков ведут от первого traceback до уверенной обработки: try и except, конкретные типы (ValueError, KeyError, TypeError, FileNotFoundError), as e для текста ошибки, else и finally, raise для своих правил, повторное возбуждение, иерархия исключений, свои классы исключений, EAFP против LBYL, цепочки raise from — и финальный проект: надёжный парсер файла, который переживает грязные данные.

Каждый блок исполняется в браузере: видно и правильную обработку, и настоящую ошибку — со сравнением вывода.

Чему научитесь

  • Читать traceback и находить причину ошибки
  • Ловить исключения через try и except
  • Ловить конкретные типы: ValueError, KeyError, TypeError
  • Получать объект ошибки через as e
  • Использовать else и finally по назначению
  • Бросать исключения через raise
  • Повторно возбуждать исключение без потери стека
  • Разбираться в иерархии исключений
  • Создавать свои классы исключений
  • Писать код в стиле EAFP

Для кого: Тем, кто уже писал код и видел traceback: курс учит не бояться красных сообщений, а управлять ими.

Программа раздела
20 уроков
  1. Урок 1. Что такое исключение: первая ошибка в программеПервая ошибка в программе: читаем traceback за десять секунд — тип ошибки, место и сообщение. Разбираем четыре типовых падения на живом коде.
  2. Урок 2. try и except: ловим ошибку и не падаемПервый запасной план: try держит рискованный код, except — что делать, если он упал. Прыжки, пропуски и try внутри цикла — на живом коде.
  3. Урок 3. except ValueError: ловим конкретный тип ошибкиУточняем обработчик: except ValueError ловит только свой тип ошибок. Почему голый except прячет опечатки и как ValueError ведёт себя у int и list.remove.
  4. Урок 4. Несколько except: разные ошибки — разные реакцииЦепочка except-блоков: ValueError — один план, ZeroDivisionError — другой. Порядок обработчиков, правило одного обработчика и кортеж типов.
  5. Урок 5. as e: объект ошибки в переменнойОбработчик узнаёт больше, если взять ошибку в переменную: except ValueError as e даёт тип, сообщение и аргументы исключения.
  6. Урок 6. else и finally: два хвоста tryДва хвоста try: else работает при успехе, finally — при любом исходе. Разбираем порядок try, except, else, finally и место каждого блока.
  7. Урок 7. raise: бросаем исключение самиДо сих пор ошибки бросал Python. Теперь научимся бросать сами: raise ValueError с понятным текстом, когда данные нарушают правила программы.
  8. Урок 8. Повторное возбуждение: голый raise в exceptИсключение поймано, но проблема не решена: голый raise внутри except передаёт её наверх, не теряя стек. Учимся честному пробросу и ловим RuntimeError от raise вне except.
  9. Урок 9. Иерархия исключений Python: кто чей родительZeroDivisionError, KeyError, FileNotFoundError — не набор случайных имён, а семейное дерево. Разбираемся, кто чей родитель и почему ловля родителя ловит детей.
  10. Урок 10. Свои исключения в Python: класс от ExceptionValueError говорит «что-то не то», но не «какое правило нарушено». Заводим свои классы исключений: внятное имя в логах, свои атрибуты и целые семейства ошибок.
  11. Урок 11. KeyError в Python: ошибки словарейСловарь не нашёл ключ — и честно сказал об этим KeyError. Разбираем объект ошибки, читаем из него ключ и выбираем между get, in и честным исключением.
  12. Урок 12. ValueError в Python: разбор строк в числаint('восемнадцать') — тип подходящий, а значение не помещается. Разбираем сообщение invalid literal, границы int и float и честную проверку isdigit.
  13. Урок 13. FileNotFoundError в Python: файл не нашёлсяopen('нет-такого-файла.txt') — и программа падает. Ловим FileNotFoundError, читаем имя файла из объекта ошибки и создаём файлы прямо в примерах.
  14. Урок 14. EAFP против LBYL в Python: два стиля проверкиLook Before You Leap — смотри, прежде чем прыгнуть; Easier to Ask Forgiveness than Permission — проще извиниться, чем спросить. Одна задача, два стиля, один вердикт.
  15. Урок 15. except Exception в Python: когда ловить всё и чем это грозитОдна строка вместо перечня типов: except Exception ловит почти всё. Разбираем слепую зону перехвата, спрятанные баги и место, где широкая сетка уместна по-настоящему.
  16. Урок 16. Ошибки в цикле Python: try внутри for и продолжение после сбояСто строк данных, одна битая — и без защиты падает весь проход. Ставим try вокруг одного элемента: сбой обрабатывается, цикл идёт дальше, сбои считаются и попадают в журнал.
  17. Урок 17. raise from в Python: цепочка причин, __cause__ и __context__Обработчик превращает чужую ошибку в свою — а куда девается первоначальная? Python хранит её в цепочке: raise from e помечает причину явно, from None прячет её сознательно.
  18. Урок 18. assert в Python: проверки для разработчика и AssertionErrorassert — это заявление: здесь должно быть так. Провал превращается в AssertionError с вашим сообщением, а флаг -O умеет вырезать все проверки разом — поэтому инструмент разработчика, а не валидатор ввода.
  19. Урок 19. except или if в Python: граница применимости проверки и исключенияОтсутствие ключа: проверить if-ом или поймать KeyError? Разбираем честную границу: обычные варианты — if, редкие сбои — except, и случай, где проверка проигрывает исключению всухую.
  20. Урок 20. Проект: надёжный разбор файла с грязными данными в PythonИтоговый проект: файл с мусором — пустые строки, слова вместо чисел, пробелы — не роняет отчёт, а попадает в журнал. Три куска: построчный разбор, счётчики с первыми ошибками и функция-парсер со сверкой.