/
github_better
/
GenAI
Обзор
Документация
Войти
/
github_better
/
GenAI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Debugger.py
69 строк
3 KB
github_better
New
22 дек 2025, 08:52
22 дек 2025, 08:52
b68d8c4
Код
Авторство
О чём код?
import inspect import sys import os def debug_print(logger, *args, want_not_print=True, want_logger_print=False, want_print_all_functions=False, want_logger_print_only_in_errors_and_no_other_loggers_print=True): """ Выводит отладочную информацию с указанием файла, функции и номера строки. :param logger: объект логгера :param args: произвольные аргументы для вывода :param want_not_print: если True, вывод полностью отключается :param want_logger_print: если True, использует logger вместо print :param want_print_all_functions: если False, не выводит пустые вызовы :param want_logger_print_only_in_errors_and_no_other_loggers_print: если True, логирует только в контексте обработки исключений :return: ничего не возвращает """ if want_not_print: return if want_print_all_functions == False and not args: return # Получаем информацию о текущем исключении exc_type, exc_value, exc_tb = sys.exc_info() is_in_exception_context = exc_type is not None if want_logger_print: # Проверяем флаг ограничения логирования только ошибками if want_logger_print_only_in_errors_and_no_other_loggers_print: # Логируем только если находимся в контексте исключения if not is_in_exception_context: return frame = inspect.currentframe() if frame is None: return frame = frame.f_back info = inspect.getframeinfo(frame) filename = os.path.basename(info.filename) message = f"[{filename}:{info.function}:{info.lineno}] " + " ".join(map(str, args)) # Выбираем способ логирования в зависимости от контекста if is_in_exception_context: # В блоке except — логируем исключение с трассировкой logger.exception(message) else: # В обычном коде — просто информационный лог logger.info(message) else: # Для обычного print проверяем флаг ограничения if want_logger_print_only_in_errors_and_no_other_loggers_print: # Этот флаг касается только логгера, поэтому print работает как обычно pass frame = inspect.currentframe() if frame is None: return frame = frame.f_back info = inspect.getframeinfo(frame) filename = os.path.basename(info.filename) print(f"[{filename}:{info.function}:{info.lineno}]", *args)