You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承Networkx MultiDiGraph后调用add_weighted_edges_from报KeyError: None

问题根因

你重写的add_edge方法没有按照父类MultiDiGraph.add_edge的约定返回边的键值,导致后续逻辑无法正确获取刚创建的边的索引,最终触发KeyError: None。

  • 父类MultiDiGraph.add_edge执行完成后会返回新增边的唯一整数key,这个返回值会被上层的add_edges_from方法接收,用来更新边的属性
  • 你重写的add_edge只有调用逻辑没有return语句,默认返回None,当add_edges_from尝试用None作为键去访问边属性时就触发了报错

修复方案

给所有重写的边添加方法补全返回值即可,保持和父类方法的行为一致:

class ClassName(nx.MultiDiGraph):
    # some code..

    def add_edge(self, *args, **kwargs):
        """ add one edge """
        self._dirty = True
        # 透传父类方法的返回值
        return super().add_edge(*args, **kwargs)
        
    def add_edges_from(self, *args, **kwargs):
        """ add several edges """
        self._dirty = True
        # 透传父类方法的返回值
        return super().add_edges_from(*args, **kwargs)

    def add_weighted_edges_from(self, *args, **kwargs):
        """ add several weighted edges """
        self._dirty = True
        # 透传父类方法的返回值
        return super().add_weighted_edges_from(*args, **kwargs)

除了add_edge必须返回key之外,另外两个方法父类本身也有对应返回值(add_edges_from返回新增边的key列表),补全返回值可以避免后续依赖这些返回值的逻辑出现其他隐性问题。

内容的提问来源于stack exchange,提问作者krgira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:15:03