Задача курса
Python: Диагностика циклического импорта по traceback
Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Циклические зависимости: частично инициализированный модуль и исправление направления зависимостей»
Условие
Диагностика циклического импорта по traceback
Ты пишешь утилиту, которая анализирует текст Python-traceback и определяет, вызван ли он циклическим импортом, а также находит виновный модуль.
Что уже дано
Проверяющая система ничего не создаёт заранее. Твой скрипт получает данные через stdin и должен напечатать результат в stdout.
Что нужно сделать
Напиши программу, которая:
- Читает из
stdinмногострочный текст — полный Python-traceback. - Определяет, является ли ошибка симптомом циклического импорта. Критерии:
- последняя строка содержит
ImportErrorи подстрокуcannot import name; - И в той же последней строке присутствует подстрока
partially initialized module.
- Если оба критерия выполнены:
- Извлекает из последней строки имя частично инициализированного модуля. Оно стоит после
partially initialized module 'и до следующей'. - Выводит:
CYCLE DETECTED partially initialized: <имя_модуля>
- Если критерии не выполнены — выводит:
NO CYCLE
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
Многострочная строка — текст traceback. Гарантируется, что последняя непустая строка либо является строкой с ImportError, либо содержит другой тип ошибки. Пустые строки в конце допустимы.
Формат вывода
Если цикл обнаружен:
CYCLE DETECTED partially initialized: <имя_модуля>
Иначе:
NO CYCLE
Примеры
Пример 1
- Ввод
Traceback (most recent call last): File "run.py", line 1, in <module> from mypackage.a import func_a File "/path/to/mypackage/a.py", line 1, in <module> from mypackage.b import func_b File "/path/to/mypackage/b.py", line 1, in <module> from mypackage.a import func_a ImportError: cannot import name 'func_a' from partially initialized module 'mypackage.a' (most likely due to a circular import)- Ожидаемый результат
CYCLE DETECTED partially initialized: mypackage.a
Попробуйте решить
РешениеPython
Без регистрации · результат не сохраняется
