← Все вопросы

Как читать traceback в Python и быстро находить строку с ошибкой?

Задан 11 месяцев назад332 просмотров2 ответа
10

Когда программа падает, Python выводит длинную «простыню» текста — traceback. Я в ней теряюсь и не понимаю, куда смотреть. Как правильно читать traceback и быстро находить, в какой строке моя ошибка?

2 ответа

14
✓ Принятый ответ — помог автору

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

Что где:

  1. Самая нижняя строка — тип и текст ошибки: ZeroDivisionError: division by zero. Это главное: что именно сломалось.
  2. Строка File ... line ... прямо над ней — место, где ошибка случилась: файл main.py, строка 4, функция average. Сюда смотреть в первую очередь.
  3. Блоки выше — цепочка вызовов: кто кого вызвал. Здесь строка 8 вызвала average, а внутри неё на строке 4 произошёл сбой.

Алгоритм:

  1. Прочитайте последнюю строку — поймите тип ошибки.
  2. Найдите самую нижнюю строку с вашим файлом и номером — откройте этот номер строки.
  3. Если ошибка в чужой библиотеке, поднимайтесь вверх до последней строки своего кода — обычно проблема там.

Совет: most recent call last буквально значит «последний вызов — внизу». Поэтому интересное (и причина) почти всегда в самом низу, а не вверху.

5

Короткая шпаргалка: последняя строка = что сломалось, строка с вашим файлом над ней = где сломалось. Скопируйте текст последней строки (например, KeyError: 'name') в поиск — и сразу поймёте класс проблемы. А номер строки в File "...", line N ведёт прямо к месту в вашем коде.

Ваш ответ

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