尝试从Python列表中移除元素时引发错误(pydot对象)
我正在写一个算法,用来表示回归树,使用的是pydot模块(这是一个和Graphviz的Dot语言对接的工具)。在这个算法中,我创建了边(Edges)和节点(Nodes)的列表,然后把它们表示出来——这一部分运行得很好。
但是在某些特定情况下,我需要删除一些边和节点,这就是我遇到麻烦的地方。以下是代码的一部分:
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
表面上看,这个问题出在没有父图的边或节点上。所以,解决这个问题的总体思路就是:不要让节点和边孤零零地存在,始终把它们连接到图上,然后在需要的时候再从图中移除。