Чтение traceback и типичные ошибки
Содержание курса
В одном из первых уроков вы уже сталкивались с тем, что Python сообщает об ошибке: выводил что-то вроде «File "main.py", line 3» и название ошибки. Тогда речь шла о SyntaxError — проблемах, которые Python замечает ещё до запуска программы. Сейчас мы разбираем другой класс: ошибки времени выполнения. Программа стартует, что-то делает — и в какой-то момент падает с многострочным сообщением. Это сообщение называется traceback, и читать его — отдельный навык.
Структура traceback: что Python печатает при ошибке
Когда программа падает в момент выполнения, Python не просто выводит одну строку. Он печатает полный отчёт — traceback. Выглядит это примерно так:
Traceback (most recent call last):
File "main.py", line 5, in <module>
result = calculate(0)
File "main.py", line 2, in calculate
return 10 / x
ZeroDivisionError: division by zero
Разберём, из чего это состоит.
Первая строка всегда одна и та же:
Traceback (most recent call last):
Она сигнализирует: дальше идёт стек вызовов. Фраза «most recent call last» подсказывает порядок: внизу будет самый последний вызов — то есть именно то место, где всё сломалось.
Стек вызовов — это последовательность функций, которые были активны в момент ошибки. Каждая функция — один кадр, и Python показывает их по порядку: от точки входа в программу до места, где возникло исключение. Каждый кадр стека состоит из двух составляющих: строки заголовка и фрагмента кода.
Строка заголовка:
File "main.py", line 2, in calculate
В ней три элемента: имя файла (File "main.py"), номер строки (line 2) и имя функции (in calculate).
Фрагмент кода — строка сразу под заголовком:
return 10 / x
Это дословная выдержка из исходного файла — именно тот код, который выполнялся в данном кадре.
Если функций в цепочке несколько, кадров будет несколько. Самый нижний кадр — непосредственное место, где Python столкнулся с проблемой.
Последняя строка — это тип исключения и его описание:
ZeroDivisionError: division by zero
До двоеточия — имя класса ошибки (тип исключения). После двоеточия — короткое объяснение от Python. Именно с этой строки начинается диагностика: прочитав тип, уже можно понять природу проблемы, не вникая в весь стек.
Важно понять: traceback — не хаотичный вывод, а структурированный отчёт с фиксированной анатомией. Начало — всегда «Traceback (most recent call last):». Конец — всегда тип исключения. Всё между ними — цепочка вызовов, которая привела к ошибке.
