Anteprima della lezione

Ошибки и исключения в Python 3.15: читаем трейсбек и подсказки «Did you mean»

try/except/else/finally, свои исключения, чтение трейсбека. Для опытных: точные указатели (3.11), группы исключений и except* (3.11), except без скобок (3.14), новые подсказки в 3.15.

исключение трейсбек except* Did you mean
Cosa imparerai in questa lezione
  • Читать трейсбек сверху вниз и снизу вверх
  • Ловить только нужные исключения
  • Пользоваться подсказками интерпретатора

Inizio della lezione

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 — у объекта нет такого метода.

La lezione completa è disponibile con l'abbonamento

10 altre slide nella versione completa.

Video, tutte le slide, appunti, test, tutor AI e intervista si sbloccano dopo l'accesso e l'abbonamento.

Accedi o registrati Attiva l'abbonamento

Contenuti della lezione

  1. Python 3.15 подсказывает решение прямо в ошибке
  2. Трейсбек: читаем снизу вверх
  3. Пять ошибок, которые вы увидите первыми
  4. try/except: перехватить и обработать
  5. Грабли: голый except глотает всё
  6. raise и свои исключения
  7. ❓ Стоп-проверка: в каком порядке напечатается?
  8. ✅ Ответ: сначала finally, потом результат
  9. Что нового: точные указатели и add_note (3.11)
  10. Что нового: группы исключений и except* (3.11)
  11. Что нового: except без скобок (3.14, PEP 758)
  12. Что нового: «Did you mean» стало умнее (3.15)
  13. Итог: трекер падает понятно и только по делу

Tutte le lezioni del corso

  1. Python 3.15 с нуля и для опытных: что нового и как учить
  2. Python 3.15: установка, REPL и первый скрипт за десять минут
  3. Переменные, числа и строки в Python: f-строки и t-строки
  4. Условия, циклы и match/case в Python: управляем ходом программы
  5. Списки, кортежи, словари и множества: frozendict в Python 3.15
  6. Comprehensions в Python: распаковка * и ** внутри (PEP 798)
  7. Функции и аннотации типов в Python: от def до sentinel
  8. Ошибки и исключения в Python 3.15: читаем трейсбек и подсказки «Did you mean»
  9. Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
  10. Файлы, JSON и CSV в Python: pathlib и UTF-8 по умолчанию
  11. Классы и dataclasses в Python: ООП без лишнего кода
  12. Асинхронность и потоки в Python: asyncio, TaskGroup и free-threading
  13. Профилирование Python 3.15: Tachyon вместо cProfile и итоговый проект