NetworkX读取含long类型属性的GraphML时出现KeyError: 'long'如何解决
问题原因
NetworkX内置的GraphML解析器默认的属性类型映射表没有包含long类型,即便GraphML官方规范允许该类型,解析时遇到未识别的类型就会抛出KeyError: 'long'异常。
解决方法
方法1:修改GraphML源文件(操作最简单)
直接修改你的GraphML文件中对应的key定义,将attr.type="long"改为attr.type="int"即可。Python 3中的int本身支持任意精度的整数,不会出现数值溢出问题,完全可以替代long类型的功能。
修改后的key标签示例:
<key id="d20" for="edge" attr.name="key" attr.type="int" />
方法2:自定义类型映射(无需修改源文件)
如果不能修改源文件,调用nx.read_graphml时传入自定义的类型映射表,补充long类型的映射规则即可,示例代码如下:
import networkx as nx # 自定义属性类型映射,补充long类型支持 custom_type_map = { "boolean": bool, "int": int, "long": int, "float": float, "double": float, "string": str } with open("final_graphml_train/myhead.txt", mode='rb') as graph_input: graph = nx.read_graphml(graph_input, types=custom_type_map)
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

