Зачем нужна отладка?
Даже опытные программисты пишут код с ошибками. Умение быстро находить и исправлять ошибки — один из важнейших навыков разработчика.
💡 Совет: Виды ошибок:
- Синтаксические — пропущенные скобки, двоеточия, неверные отступы
- Логические — программа работает, но выдаёт неверный результат
- Исключения (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
Каждая среда разработки предоставляет горячие клавиши для отладки. Вот основные:
| Действие | IDLE | VS Code | PyCharm |
|---|---|---|---|
| Точка останова (breakpoint) | — | F9 | Клик на номер строки |
| Запуск отладки | — | F5 | Shift+F9 |
| Следующая строка (Step Over) | — | F10 | F8 |
| Зайти внутрь (Step Into) | — | F11 | F7 |
| Выйти из функции (Step Out) | — | Shift+F11 | Shift+F8 |
| Продолжить до следующей точки (Continue) | — | F5 | F9 |
| Запуск файла | F5 | Ctrl+F5 / кнопка ▶ | Shift+F10 |
| Остановка выполнения | Ctrl+C | Shift+F5 | Ctrl+F2 |
| Перезапуск | F5 | Ctrl+Shift+F5 | Ctrl+F5 |
💡 Совет: IDLE — простая среда без встроенного отладчика. Для пошаговой отладки используйте VS Code или PyCharm.
Практические советы
- Читайте сообщения об ошибках внимательно — Python указывает файл, строку и тип ошибки
- Проверяйте входные данные — ошибка часто не там, где программа упала, а там, откуда пришли некорректные данные
- Упрощайте — если не можете найти ошибку в большом коде, выделите проблемный участок и проверьте его отдельно
- Используйте метод резиновой уточки (rubber duck) — объясняя код вслух, вы часто сами находите ошибку
- Git — делайте коммиты после каждой работающей версии, чтобы можно было откатиться