【发布时间】:2016-01-27 18:00:48
【问题描述】:
【问题讨论】:
标签: python-2.7 graphml pygraph
【问题讨论】:
标签: python-2.7 graphml pygraph
注意:这是我第一次遇到pygraphml。
问题似乎是您的图形定义文件 (test.graphml) 中的逻辑错误。最重要的是pygraphml2.0,似乎不能很好地处理此类错误:
正如所指出的,错误:TypeError: 'NoneType' object does not support item assignment,来自 graphml_parser.py 行 114:
e[attr.getAttribute("key")] = attr.firstChild.data
e 是/应该是 pygraphml.edge.Edge 类型的对象,并在同一文件中的第 110 行初始化:
e = g.add_edge_by_label(source, dest)
问题在于e 是None,因此出现了错误。 g(实例化e)是pygraphml.graph.Graph 类型的对象。转到 graph.py,add_edge_by_label 定义在 147 行:
def add_edge_by_label(self, label1, label2):
"""
"""
n1 = None
n2 = None
for n in self._nodes:
if n['label'] == label1:
n1 = n
if n['label'] == label2:
n2 = n
if n1 and n2:
return self.add_edge(n1, n2)
else:
return
所以,您遇到了最后一个 return 语句,这意味着在 test.graphml 中,您(至少)有一个边缘有一个标签(或者可能两者都有),但事实并非如此' t 属于图的任何节点。
显然 pygraphml 存在问题(我认为这是一个错误),如果 Graph.add_edge_by_label 可以返回 None,则应该执行 None 测试 GraphMLParser.parse(可能在其他地方也是如此) )。
HTH(如果没有,你可以把图表文件发给我看看)。
【讨论】: