NameError, TypeError и ValueError на коротких примерах. Учимся находить причину, а не менять код наугад.
Сначала последняя строка
Когда программа печатает несколько строк с Traceback, это маршрут к месту сбоя. Начните с последней строки: там обычно указан класс исключения и пояснение. Затем найдите ближайшую строку вашего файла и её номер. В большом проекте выше могут быть вызовы библиотек — их не нужно переписывать только потому, что они появились в сообщении.
Сохраните ввод, который привёл к ошибке. Фраза «иногда не работает» почти не помогает проверке. Фраза «после ввода пустой строки падает преобразование количества» уже задаёт воспроизводимый случай.
Три похожие ситуации с разными причинами
В этих примерах задача одна — показать счёт игрока, но исправления разные. При NameError проверьте имя и порядок создания переменной; при TypeError — совместимость операций; при ValueError — содержимое значения.
| Сообщение | Пример причины | Что проверить |
|---|---|---|
| NameError | Использовано points вместо score | Опечатку и место присваивания |
| TypeError | "Баллы: " + 5 | Типы с обеих сторон + |
| ValueError | int("пять") | Введённый текст |
Исправьте пример, сохранив задачу
Здесь не нужен большой рефакторинг. Удобнее передать значения отдельными аргументами print: функция сама представит число как текст. Если поменять 5 на "5", пример тоже заработает, но переменная перестанет быть числом для последующего подсчёта.
score = 5
# Неверно: print("Баллы: " + score)
print("Баллы:", score)
score = score + 2
print("После бонуса:", score)SyntaxError: смотрите и на предыдущую строку
При синтаксической ошибке программа может вообще не начать выполнение. Указатель показывает, где интерпретатор обнаружил проблему, а не всегда место её возникновения. Если забыта закрывающая скобка, подсвеченной может оказаться следующая строка. Проверьте парность скобок и кавычек, двоеточие после if и отступы внутри блока.
Скопированный из чата текст иногда содержит типографские кавычки. Перепечатайте спорный символ в редакторе, а не заменяйте целые функции без необходимости.
Одна правка — одна проверка
Сделайте минимальное исправление и повторите исходный сценарий. Затем проверьте соседние случаи: ноль, пустой ввод, другое имя. Если менять одновременно названия, формулы и формат вывода, непонятно, какая правка помогла и что сломалось рядом.
Практика: в примере выше замените второе score на scores. Найдите ошибку по сообщению, верните имя и убедитесь, что итог снова 7. После этого намеренно добавьте строку "2" к числу. Сравните два сообщения: разные классы исключений указывают на разные вопросы.
из статьи — в свой проект
Разбор ошибок Python
Открой инструмент ZIPKA и попробуй пример из разбора. Он доступен бесплатно, без записи на курс.
Открыть инструмент ↗