graphviz_layout:AttributeError:'NoneType'对象没有属性'get_node'

时间:2017-05-30 21:16:51

标签: python networkx graphviz

出于某种原因,当我尝试在动态创建的图形中实现此功能时,我得到了这个奇怪的错误。我可以运行在线给出的函数示例,但是当我运行它时它会失败。

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' 

3 个答案:

答案 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与永恒的

没有直接的作用