Python 3.9+graphlibисключение
graphlib.CycleError
топологическая сортировка
Исключение TopologicalSorter, когда в графе есть цикл; во втором аргументе — сам цикл списком узлов.
Синтаксис
except graphlib.CycleError as e: cycle = e.args[1]
Это подкласс ValueError, поэтому except ValueError его тоже поймает. Цикл лежит в e.args[1], а не в отдельном атрибуте, и первый узел повторяется в конце: ['a', 'b', 'a']. Найден будет один цикл, а не все; узел, зависящий сам от себя, тоже цикл.
Примеры
from graphlib import TopologicalSorter, CycleError
try:
list(TopologicalSorter({'a': {'b'}, 'b': {'a'}}).static_order())
except CycleError as e:
print(e.args[1]) # → ['a', 'b', 'a']
print(issubclass(CycleError, ValueError)) # → True
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности