Ошибки и исключения в Python 3.15: читаем трейсбек и подсказки «Did you mean»
try/except/else/finally, свои исключения, чтение трейсбека. Для опытных: точные указатели (3.11), группы исключений и except* (3.11), except без скобок (3.14), новые подсказки в 3.15.
- Читать трейсбек сверху вниз и снизу вверх
- Ловить только нужные исключения
- Пользоваться подсказками интерпретатора
Início da aula
Python 3.15 подсказывает решение прямо в ошибке
- JavaScript-привычка: list.push → в Python append
- 3.15 предлагает правильный метод
- Для tuple — совет взять list, для dict — d[k] = v
Вы пришли из JavaScript и по привычке добавляете элемент в список методом push. Раньше Python отвечал сухо: у списка нет такого атрибута — и всё, ищите сами. В 3.15 ошибка звучит иначе: такого атрибута нет, возможно, вы имели в виду append? Попытка добавить элемент в кортеж подскажет взять список, а метод put у словаря — использовать квадратные скобки. Ошибки перестают быть приговором и становятся подсказкой. Давайте научимся их читать.
>>> ["Кофе", "Такси"].push("Обед")
AttributeError: 'list' object has no attribute 'push'.
Did you mean '.append'?
>>> (1, 2).append(3)
AttributeError: 'tuple' object has no attribute 'append'.
Did you mean to use a 'list' object?
>>> {}.put("Еда", 120)
AttributeError: 'dict' object has no attribute 'put'.
Use d[k] = v.
Трейсбек: читаем снизу вверх
- Последняя строка: тип ошибки и сообщение
- Выше: цепочка вызовов, от внешнего к внутреннему
- ~~~^^^ (3.11+) — точное место в строке
Трейсбек — это отчёт о том, как программа дошла до ошибки. Читать его удобнее снизу вверх. Последняя строка — самое главное: тип ошибки и человеческое описание. Здесь — не удалось превратить слово «сто» в число. Чуть выше — строка кода, где это случилось, ещё выше — кто её вызвал, и так до самого начала программы. Значки-волны и галочки под кодом показывают, какое именно выражение в строке сломалось.
Traceback (most recent call last):
File "load.py", line 8, in <module>
load(rows)
~~~~^^^^^^
File "load.py", line 5, in load
return [parse_amount(r["amount"]) for r in rows]
~~~~~~~~~~~~^^^^^^^^^^^^^
File "load.py", line 2, in parse_amount
return float(raw.replace(",", "."))
ValueError: could not convert string to float: 'сто'
Пять ошибок, которые вы увидите первыми
- NameError — имя не определено (опечатка)
- TypeError — операция не для этого типа
- ValueError — тип верный, значение нет
- KeyError / IndexError — нет ключа / индекса
- AttributeError — нет метода или поля
Типов ошибок в Python десятки, но на старте вы встретите в основном пять. NameError — опечатались в имени или забыли его объявить. TypeError — пытаетесь сделать с объектом то, чего он не умеет, например сложить строку с числом. ValueError — тип правильный, а значение не подходит, как слово «сто» для перевода в число. KeyError и IndexError — обратились к ключу или позиции, которых нет. И AttributeError — у объекта нет такого метода.
A aula completa é para assinantes
Mais 10 slides na versão completa.
O vídeo, todos os slides, anotações, testes, tutor de IA e entrevista ficam disponíveis após entrar e assinar.
Entrar ou cadastrar-se AssinarConteúdo da aula
- Python 3.15 подсказывает решение прямо в ошибке
- Трейсбек: читаем снизу вверх
- Пять ошибок, которые вы увидите первыми
- try/except: перехватить и обработать
- Грабли: голый except глотает всё
- raise и свои исключения
- ❓ Стоп-проверка: в каком порядке напечатается?
- ✅ Ответ: сначала finally, потом результат
- Что нового: точные указатели и add_note (3.11)
- Что нового: группы исключений и except* (3.11)
- Что нового: except без скобок (3.14, PEP 758)
- Что нового: «Did you mean» стало умнее (3.15)
- Итог: трекер падает понятно и только по делу
Todas as aulas do curso
- Python 3.15 с нуля и для опытных: что нового и как учить
- Python 3.15: установка, REPL и первый скрипт за десять минут
- Переменные, числа и строки в Python: f-строки и t-строки
- Условия, циклы и match/case в Python: управляем ходом программы
- Списки, кортежи, словари и множества: frozendict в Python 3.15
- Comprehensions в Python: распаковка * и ** внутри (PEP 798)
- Функции и аннотации типов в Python: от def до sentinel
- Ошибки и исключения в Python 3.15: читаем трейсбек и подсказки «Did you mean»
- Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
- Файлы, JSON и CSV в Python: pathlib и UTF-8 по умолчанию
- Классы и dataclasses в Python: ООП без лишнего кода
- Асинхронность и потоки в Python: asyncio, TaskGroup и free-threading
- Профилирование Python 3.15: Tachyon вместо cProfile и итоговый проект