Ответ
Использую многоуровневый подход к отладке и мониторингу кода на Python.
-
Логирование (logging) – для продакшена и долгосрочного анализа. Настраиваю структурированное логирование с разными уровнями.
import logging import sys logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # Консольный handler для разработки console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) logger.addHandler(console_handler) # File handler с ротацией для прода from logging.handlers import RotatingFileHandler file_handler = RotatingFileHandler('app.log', maxBytes=10485760, backupCount=5) file_handler.setLevel(logging.WARNING) file_handler.setFormatter(formatter) logger.addHandler(file_handler) logger.info("Запуск обработки батча...") logger.error("Не удалось подключиться к БД", exc_info=True) -
Интерактивная отладка (pdb/ipdb) – для локального поиска сложных багов. Предпочитаю
ipdbиз-за подсветки синтаксиса и автодополнения.def tricky_function(data): result = [] for item in data: # Устанавливаем точку останова import ipdb; ipdb.set_trace() processed = complex_transformation(item) result.append(processed) return resultВ отладчике проверяю состояние переменных, выполняю код по шагам (
n- next,s- step into). -
Дополнительные инструменты:
- Sentry – для централизованного сбора и оповещения об ошибках в продакшене.
- Декоратор
@debugилиprint-выражения – для быстрой ad-hoc отладки простых скриптов. - Профилировщики (cProfile, line_profiler) – когда нужно найти узкие места по производительности, а не логические ошибки.