2011-07-15 19 views
1

我正在使用pydot模塊(Graphviz的Dot語言的一個接口)編寫一個算法來表示迴歸樹。 在算法中,邊​​緣和節點的列表被製作,然後它們被表示 - 工作正常。當我嘗試從python列表中刪除元素(pydot對象)時出現錯誤

但在某些特定情況下,我需要刪除一些邊緣和節點,這就是我卡住的地方。下面是部分代碼:

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的行爲像這樣... 有人可以向我解釋,或給我任何想法如何改變這種行爲?

由於提前, 卡拉

回答

1

在表面上看,似乎這個問題是在邊緣或節點無父圖。因此,整體解決方案將是:不允許節點和邊緣四處閒逛,始終將它們附加到圖上,然後根據需要從圖中移除。

+0

唯一的例外發生在__eq __文件pydot.pyc的821線(個體經營,邊緣) 如果self.get_parent_graph()get_top_graph_type()==「曲線」: – carla

+0

正是從這個不清楚,你的代碼確實會調用,這會導致異常。如果可以,請提供完整的堆棧。似乎pydot中的None值取代了庫期望成爲對象(Edge,或者具有get_top_graph_type()方法)的東西。 – spacediver

+0

表面上看來,問題出現在沒有父圖的邊或節點上。因此,整體解決方案將是:不允許節點和邊緣四處閒逛,始終將它們附加到圖上,然後根據需要從圖中移除。 – spacediver

相關問題