Задача курса

Python: Диагностика циклического импорта по traceback

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Циклические зависимости: частично инициализированный модуль и исправление направления зависимостей»

Условие

Диагностика циклического импорта по traceback

Ты пишешь утилиту, которая анализирует текст Python-traceback и определяет, вызван ли он циклическим импортом, а также находит виновный модуль.

Что уже дано

Проверяющая система ничего не создаёт заранее. Твой скрипт получает данные через stdin и должен напечатать результат в stdout.

Что нужно сделать

Напиши программу, которая:

  1. Читает из stdin многострочный текст — полный Python-traceback.
  2. Определяет, является ли ошибка симптомом циклического импорта. Критерии:
  • последняя строка содержит ImportError и подстроку cannot import name;
  • И в той же последней строке присутствует подстрока partially initialized module.
  1. Если оба критерия выполнены:
  • Извлекает из последней строки имя частично инициализированного модуля. Оно стоит после partially initialized module ' и до следующей '.
  • Выводит:
CYCLE DETECTED
partially initialized: <имя_модуля>
  1. Если критерии не выполнены — выводит:
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
Без регистрации · результат не сохраняется