Урок 24 Отладка

print(), pdb, логирование — как находить и исправлять ошибки в коде

⏱ ~12 мин чтения· 📘 Базовый

Зачем нужна отладка?

Даже опытные программисты пишут код с ошибками. Умение быстро находить и исправлять ошибки — один из важнейших навыков разработчика.

💡 Совет: Виды ошибок:

  • Синтаксические — пропущенные скобки, двоеточия, неверные отступы
  • Логические — программа работает, но выдаёт неверный результат
  • Исключения (runtime) — ошибки во время выполнения: деление на ноль, неверный тип данных

Отладка с помощью print()

Самый простой и часто используемый способ — вывод промежуточных значений:

def calculate_total(prices, discount):
    print(f"DEBUG: prices = {prices}")        # смотрим входные данные
    total = sum(prices)
    print(f"DEBUG: total = {total}")           # промежуточный результат
    final = total * (1 - discount)
    print(f"DEBUG: final = {final}")           # итог
    return final

result = calculate_total([100, 200, 300], 0.1)
print(f"Результат: {result}")

💡 Совет: используйте префикс DEBUG: или >>>, чтобы легко отличить отладочный вывод от основного и быстро удалить его потом.

f-строки для отладки (Python 3.8+)

Специальный синтаксис {var=} выводит имя переменной и её значение:

name = "Анна"
age = 25
print(f"{name=} {age=}")   # name='Анна' age=25

x = 10
y = 20
print(f"{x + y = }")       # x + y = 30

Встроенный отладчик pdb

Python включает интерактивный отладчик pdb. Он позволяет выполнять код по шагам, просматривать значения переменных и находить ошибки.

import pdb

def buggy_function(a, b):
    result = a / b
    return result

# Устанавливаем точку останова
pdb.set_trace()  # выполнение остановится здесь
x = 10
y = 0
print(buggy_function(x, y))

Основные команды pdb:

КомандаДействие
n (next)Выполнить следующую строку
s (step)Зайти внутрь функции
c (continue)Продолжить выполнение
p переменнаяВывести значение переменной
l (list)Показать текущий участок кода
q (quit)Выйти из отладчика

Модуль logging

logging — более продвинутый способ отслеживания работы программы. В отличие от print(), позволяет настраивать уровни важности сообщений и выводить их в файл.

import logging

# Настройка: уровень INFO и выше, запись в файл
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(message)s',
    filename='app.log'
)

def divide(a, b):
    logging.info(f"divide({a}, {b}) вызвана")
    if b == 0:
        logging.error("Деление на ноль!")
        return None
    result = a / b
    logging.debug(f"Результат: {result}")
    return result

print(divide(10, 2))   # 5.0
print(divide(10, 0))   # None

Уровни логирования (по возрастанию):

  • DEBUG — подробная отладочная информация
  • INFO — общая информация о работе программы
  • WARNING — предупреждения
  • ERROR — ошибки
  • CRITICAL — критические ошибки

Горячие клавиши отладки в IDE

Каждая среда разработки предоставляет горячие клавиши для отладки. Вот основные:

ДействиеIDLEVS CodePyCharm
Точка останова (breakpoint)F9Клик на номер строки
Запуск отладкиF5Shift+F9
Следующая строка (Step Over)F10F8
Зайти внутрь (Step Into)F11F7
Выйти из функции (Step Out)Shift+F11Shift+F8
Продолжить до следующей точки (Continue)F5F9
Запуск файлаF5Ctrl+F5 / кнопка ▶Shift+F10
Остановка выполненияCtrl+CShift+F5Ctrl+F2
ПерезапускF5Ctrl+Shift+F5Ctrl+F5

💡 Совет: IDLE — простая среда без встроенного отладчика. Для пошаговой отладки используйте VS Code или PyCharm.

Практические советы

  • Читайте сообщения об ошибках внимательно — Python указывает файл, строку и тип ошибки
  • Проверяйте входные данные — ошибка часто не там, где программа упала, а там, откуда пришли некорректные данные
  • Упрощайте — если не можете найти ошибку в большом коде, выделите проблемный участок и проверьте его отдельно
  • Используйте метод резиновой уточки (rubber duck) — объясняя код вслух, вы часто сами находите ошибку
  • Git — делайте коммиты после каждой работающей версии, чтобы можно было откатиться