出于某种原因,当我尝试在动态创建的图形中实现此功能时,我得到了这个奇怪的错误。我可以运行在线给出的函数示例,但是当我运行它时它会失败。
stacktrace:
122 #pos = nx.spectral_layout(G)
123 #write_dot(G,'test.dot')
--> 124 pos= graphviz_layout(G,prog='twopi',args='')
125 nx.draw_networkx(G, node_color=nodeColors, arrows=False, alpha=.8, labels=nodeLabels, font_size=8)
126 print(nx.info(G))
246 This is a wrapper for pydot_layout.
247 """
--> 248 return pydot_layout(G=G,prog=prog,root=root,**kwds)
249
250
281 for n in G.nodes():
282 pydot_node = pydotplus.Node(make_str(n)).get_name()
--> 283 node=Q.get_node(pydot_node)
284
285 if isinstance(node,list):
AttributeError: 'NoneType' object has no attribute 'get_node'
答案 0 :(得分:0)
如果不了解有关代码的更多信息,很难说是导致问题的原因,但是......
基于错误消息和堆栈跟踪,对象' Q'设置为None
。出于某种原因,当创建对象Q时,代码分配值None
而不是期望值。故障排除需要回溯才能确定何时制作Q以及将其设置为None
的原因。
--> 283 node=Q.get_node(pydot_node)
答案 1 :(得分:0)
在我看来,这是一个简单的拼写错误。你写了Q
,你可能意味着G
。没有任何名为Q
的内容,因此Q.get_node
毫无意义。但是G.get_node
会有意义。
答案 2 :(得分:0)
Joel的回答可能不正确,因为从源头上可以看出
P=to_pydot(G)
if root is not None :
P.set("root",make_str(root))
D=P.create_dot(prog=prog)
if D=="": # no data returned
print("Graphviz layout with %s failed"%(prog))
print()
print("To debug what happened try:")
print("P=pydot_from_networkx(G)")
print("P.write_dot(\"file.dot\")")
print("And then run %s on file.dot"%(prog))
return
Q=pydotplus.graph_from_dot_data(D)
node_pos={}
for n in G.nodes():
pydot_node = pydotplus.Node(make_str(n)).get_name()
node=Q.get_node(pydot_node)
所以Q与永恒的
没有直接的作用