ошибка возникает при попытке удалить элементы (объекты pydot) из списка Python - PullRequest
1 голос
/ 15 июля 2011

Я пишу алгоритм для представления деревьев регрессии, используя модуль pydot (интерфейс к языку Dot Graphviz). В алгоритме составляются списки ребер и узлов, а затем они представляются - это нормально работает.

Но в некоторых конкретных ситуациях мне нужно удалить некоторые края и узлы, и вот где я застреваю. Вот часть кода:

import pydot
graph = pydot.Dot(graph_type='graph')

link4 = pydot.Edge(node10, node21, label=etiquetas[3])
link5 = pydot.Edge(node11, node22, label=etiquetas[4])
lista_links = [link4, link5]

# if some conditions are verified, then:
lista_links.remove(link5)

for link in lista_links:
graph.add_edge(link)
graph.write_png('teste.png')

Я ожидал, что этот код будет работать без проблем, но я получаю сообщение об ошибке:

AttributeError: 'NoneType' object has no attribute 'get_top_graph_type'

Моя единственная идея - вместо удаления узлов и ребер в некоторых конкретных ситуациях изменить код и добавить только узлы и ребра после того, как я определю все конкретные ситуации. Но это было бы намного больше работы ... (Код намного больше, чем то, что я вам показал, и у меня есть несколько конкретных ситуаций, которые необходимо учитывать).

Мне любопытно, почему python ведет себя так ... Может кто-нибудь объяснить это мне или дать мне представление о том, как изменить это поведение?

Заранее спасибо, Carla

1 Ответ

1 голос
/ 15 июля 2011

На первый взгляд кажется, что проблема в краях или узлах без родительского графа.Таким образом, общее решение будет таким: не позволяйте узлам и ребрам висеть вокруг, всегда прикрепляйте их к графику, а затем удаляйте из графика по мере необходимости.

...