Đoạn xem trước bài giảng

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

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

исключение трейсбек except* Did you mean
Bạn sẽ học gì trong bài giảng này
  • Читать трейсбек сверху вниз и снизу вверх
  • Ловить только нужные исключения
  • Пользоваться подсказками интерпретатора

Phần đầu bài giảng

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

Bài giảng đầy đủ dành cho thuê bao

Còn 10 slide nữa trong phiên bản đầy đủ.

Video, toàn bộ slide, ghi chú, bài kiểm tra, gia sư AI và phỏng vấn sẽ mở sau khi đăng nhập và đăng ký thuê bao.

Đăng nhập hoặc đăng ký Đăng ký thuê bao

Nội dung bài giảng

  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. Итог: трекер падает понятно и только по делу

Bài viết liên quan đến bài học này

Tất cả bài giảng của khóa học

  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 и итоговый проект