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的行爲像這樣... 有人可以向我解釋,或給我任何想法如何改變這種行爲?
由於提前, 卡拉
唯一的例外發生在__eq __文件pydot.pyc的821線(個體經營,邊緣) 如果self.get_parent_graph()get_top_graph_type()==「曲線」: – carla
正是從這個不清楚,你的代碼確實會調用,這會導致異常。如果可以,請提供完整的堆棧。似乎pydot中的None值取代了庫期望成爲對象(Edge,或者具有get_top_graph_type()方法)的東西。 – spacediver
表面上看來,問題出現在沒有父圖的邊或節點上。因此,整體解決方案將是:不允許節點和邊緣四處閒逛,始終將它們附加到圖上,然後根據需要從圖中移除。 – spacediver