Глава 3 · Ваша первая программа на Python

Ошибки, traceback и как их читать

Ошибки — это данные, а не повод для паники. Разберём три самых частых типа и научимся читать traceback осмысленно.

Красный текст ошибки — это не повод паниковать. Это данные: Python подробно объясняет, что именно пошло не так и где именно искать проблему. Научиться спокойно читать эти сообщения — один из самых полезных навыков для новичка.

SyntaxError

Python не может даже понять структуру кода — до выполнения дело не дошло вовсе. Чаще всего причина — пропущенная скобка, кавычка или двоеточие.

broken.py
print("Привет"
Traceback
  File "broken.py", line 1
    print("Привет"
                 ^
SyntaxError: '(' was never closed

NameError

Python встретил имя, которого ещё нигде не было создано присваиванием — часто это просто опечатка.

broken2.py
print(usr_name)
Traceback
Traceback (most recent call last):
  File "broken2.py", line 1, in <module>
    print(usr_name)
          ^^^^^^^^
NameError: name 'usr_name' is not defined

IndentationError

В Python отступы — часть синтаксиса (мы вернёмся к этому подробно в главе про условия и циклы). Несогласованный отступ — тоже ошибка:

broken3.py
name = "Cartesian"
    print(name)
Traceback
  File "broken3.py", line 2
    print(name)
IndentationError: unexpected indent

Анатомия traceback

Traceback лучше всего читать снизу вверх — самая важная информация внизу:

Traceback (most recent call last):заголовок — сообщает, что дальше будет цепочка вызововFile "privet.py", line 3ГДЕ — какой файл и какая строкаprint("Привет"сама проблемная строка кодаSyntaxError: ...ЧТО и ПОЧЕМУ — тип ошибки и объяснение
Анатомия traceback — читаем снизу вверх
Где?строка и файлЧто?тип ошибкиПочему?объяснениеЧиними запускаем снова
Порядок работы с любой ошибкой
Не бойтесь красного текста
Ошибка — это Python, честно объясняющий, что случилось. Профессиональные разработчики видят traceback-и десятки раз в день — разница лишь в том, что они умеют быстро находить в нём нужную строку. Теперь и вы умеете.
Практика: прочитайте traceback (NameError)
Интерактивный ноутбук прямо в браузере — найдите и исправьте опечатку
Открыть практику →