1

pydotモジュール(GraphvizのDot言語へのインターフェース)を使用して、回帰ツリーを表すアルゴリズムを作成しています。アルゴリズムでは、エッジとノードのリストが作成され、それらが表示されます。これは正常に機能しています。

しかし、特定の状況では、エッジとノードの一部を削除する必要があり、そこで行き詰まります。コードの一部は次のとおりです。

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がこのように動作するのか興味があります...誰かが私にそれを説明したり、この動作を変更する方法について何かアイデアを教えてもらえますか?

よろしくお願いします、カーラ

4

1 に答える 1

1

表面的には、問題は親グラフのないエッジまたはノードにあるようです。したがって、全体的な解決策は次のようになります。ノードとエッジがぶら下がらないようにし、常にそれらをグラフにアタッチしてから、必要に応じてグラフから削除します。

于 2011-07-15T16:01:39.087 に答える