Как читать traceback в Python и быстро находить строку с ошибкой?
Когда программа падает, Python выводит длинную «простыню» текста — traceback. Я в ней теряюсь и не понимаю, куда смотреть. Как правильно читать traceback и быстро находить, в какой строке моя ошибка?
2 ответа
Traceback («трассировка») — это отчёт о том, как программа дошла до ошибки. Читать его правильнее снизу вверх.
Разберём пример:
Traceback (most recent call last):
File "main.py", line 8, in <module>
print(average(data))
File "main.py", line 4, in average
return total / len(nums)
ZeroDivisionError: division by zero
Что где:
- Самая нижняя строка — тип и текст ошибки:
ZeroDivisionError: division by zero. Это главное: что именно сломалось. - Строка File ... line ... прямо над ней — место, где ошибка случилась: файл
main.py, строка 4, функцияaverage. Сюда смотреть в первую очередь. - Блоки выше — цепочка вызовов: кто кого вызвал. Здесь строка 8 вызвала
average, а внутри неё на строке 4 произошёл сбой.
Алгоритм:
- Прочитайте последнюю строку — поймите тип ошибки.
- Найдите самую нижнюю строку с вашим файлом и номером — откройте этот номер строки.
- Если ошибка в чужой библиотеке, поднимайтесь вверх до последней строки своего кода — обычно проблема там.
Совет: most recent call last буквально значит «последний вызов — внизу». Поэтому интересное (и причина) почти всегда в самом низу, а не вверху.
Короткая шпаргалка: последняя строка = что сломалось, строка с вашим файлом над ней = где сломалось. Скопируйте текст последней строки (например, KeyError: 'name') в поиск — и сразу поймёте класс проблемы. А номер строки в File "...", line N ведёт прямо к месту в вашем коде.