Какие инструменты отладки (pdb, logging) используешь?

«Какие инструменты отладки (pdb, logging) используешь?» — вопрос из категории Python, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Использую многоуровневый подход к отладке и мониторингу кода на Python.

  1. Логирование (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)
  2. Интерактивная отладка (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).

  3. Дополнительные инструменты:

    • Sentry – для централизованного сбора и оповещения об ошибках в продакшене.
    • Декоратор @debug или print-выражения – для быстрой ad-hoc отладки простых скриптов.
    • Профилировщики (cProfile, line_profiler) – когда нужно найти узкие места по производительности, а не логические ошибки.