Сообщение об ошибке — это подсказка, а не приговор.
⏱️ ~45 мин·Начальный·📚 3 урока
Ошибка — это нормально
Запомните главное с самого начала: ошибки — обычная часть программирования. Их получают абсолютно все — и новички, и разработчики с двадцатью годами опыта. Красный текст на экране не значит, что вы «не способны». Он значит ровно одно: Python не понял какую-то строкуТекстовое значение в кавычках: "привет". Неизменяема. По-английски string (str). и честно сообщает, где именно запнулся.
Программисты не «не делают ошибок» — они просто научились быстро их читать и чинить. Этому навыку и посвящён урок. Освоив его, вы перестанете бояться красного текста и начнёте видеть в нём подсказку.
Из чего состоит сообщение об ошибке
Когда программа падает, Python печатает несколько строк — это называется трейсбек (traceback, «обратный след»). Выглядит он пугающе, но на самом деле в нём всего две по-настоящему важные вещи:
последняя строка — тип ошибки и её краткое описание;
номер строки — где именно в коде Python споткнулся.
Золотое правило: читайте трейсбек снизу вверх. Самая нижняя строка — это суть проблемы. Всё, что выше, — лишь «маршрут», как Python дошёл до ошибки.
▶ first-error.py
ℹ️Важно
Запустите код выше. В последней строке вы увидите примерно такое: TypeError: can only concatenate str (not "int") to str
Разберём её по словам ниже — и вы поймёте, что Python прямым текстом сказал, что не так.
Как читать последнюю строку
Последняя строка всегда устроена одинаково: ТипОшибки: пояснение. В нашем примере:
TypeError — «ошибка типа»: вы смешали несовместимые типы данных;
can only concatenate str (not "int") to str — «к строке можно приклеить только строку, а не число (int)».
То есть Python буквально объясняет: вы пытались сложить строку "Возраст: " с числом 25. Починка — превратить число в строку: "Возраст: " + str(age), либо вывести через запятую: print("Возраст:", age).
Пять ошибок, которые вы встретите чаще всего
У большинства ошибок новичка есть имя и понятная причина. Вот «великолепная пятёрка» — узнав их в лицо, вы будете чинить 90% проблем за секунды.
Имя ошибки
Что значит
Частая причина
SyntaxError
синтаксическая ошибка
забыта скобка, кавычка или двоеточие
NameError
имя не найдено
опечатка в имени или переменнаяИменованное хранилище для значения. Имя связывается со значением через присваивание: x = 5. не создана
TypeError
не тот тип
смешали строку и число
IndentationError
ошибка отступа
нет отступа после : или он «съехал»
ValueError
не то значение
int("привет") — внутри не число
💡Совет
Не пытайтесь зубрить таблицу. Просто знайте, что имя ошибки = категория проблемы. Увидели NameError — ищите опечатку в имени. Увидели IndentationError — проверьте отступы. Имя сужает поиск до одного-двух подозреваемых.
Номер строки — где искать
Кроме типа ошибки, Python всегда показывает номер строки, на которой споткнулся. Ищите в трейсбеке слово line (или «строка» в нашей песочнице) и число рядом. Это резко сужает поиск: не нужно перечитывать всю программу — достаточно посмотреть на указанную строку и пару строк выше неё.
▶ line-number.py
Запустите — Python укажет на третью строку и скажет NameError: name 'z' is not defined («имя z не определено»). Мы создали x и y, но z — нет. Это типичная опечатка: скорее всего, имелся в виду y.
⚠️Осторожно
Сообщения об ошибках в Python на английском — это нормально и не изменить. Но слов там немного, и они повторяются из раза в раз: not defined (не определено), expected (ожидалось), invalid (недопустимо), unexpected (неожиданно). Несколько раз заглянув в перевод, вы быстро запомните весь нужный словарьКоллекция пар «ключ → значение»: {"a": 1}. Быстрый доступ по ключу. По-английски dict..
💡Совет
Предскажите ошибку. Прежде чем запустить код ниже, подумайте: какого типа будет ошибка и на какой строке? Затем запустите и проверьте догадку.
▶ predict-error.py
Это ValueError на первой строке: int() умеет превращать в число только строку из цифр, а "сто" — это буквы. Python говорит invalid literal for int() — «недопустимое значение для int()».
Алгоритм «что делать при ошибке»
Когда видите красный текст, не паникуйте, а действуйте по шагам:
1. Посмотрите на последнюю строку — какой тип ошибки.
2. Найдите номер строки — где искать.
3. Переведите короткое пояснение (пары слов достаточно).
4. Посмотрите на указанную строку и подумайте, что Python мог не понять.
5. Исправьте и запустите снова. Не вышло — повторите.
Заданиерешение.py
Перед вами «сломанный» код — он падает с NameError, потому что у текста забыли кавычки. Почините его так, чтобы программа вывела слово Привет.
Заданиерешение.py
Этот код падает с TypeError: нельзя склеить строку и число напрямую. Почините его так, чтобы вывелось Мне 25 лет (число оберните в str()).
Заданиелёгкаярешение.py
Этот код падает с ValueError: int() не может превратить слово в число. Почините его так, чтобы в number оказалось число 10 — замените "десять" на строку из цифр "10".
❓Проверь себя
В какой части трейсбека искать суть ошибки?
Какую ошибку вызовет int("привет")?
Вы видите NameError. С чего разумнее всего начать поиск?
Что обычно означает IndentationError?
ℹ️Важно
✅ Что вы узнали
Ошибки — нормальная часть работы; их получают все.
Трейсбек читают снизу вверх: последняя строка — суть проблемы.
Формат: ТипОшибки: пояснение + номер строки, где искать.
Комментарии
Загрузка…
Загрузка комментариев…