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

Python Node类定义触发IndexError:tuple index out of range问题排查

问题:Node类初始化/打印时触发IndexError

我尝试定义一个结构为「3, [5,8,2]」的Node类,但运行代码时触发IndexError(tuple index out of range)错误,请问我哪里出错了?以下是编写的Node类代码:

# Node Class
class Node():
    def __init__(self,name, neighbors):
        self.name = name
        self.neighbors = []
        self.n_records = 0
    def __str__(self):
        s = "{} (#{}): name: {:3}, neighbors: {}"
        return s.format(self.name,self.neighbors)
    def add_record(self, rec):
        self.records.append(rec)
        self.n_records += 1

错误栈信息:
IndexError Traceback (most recent call last)
in


问题分析与修复方案

1. 触发IndexError的核心原因:__str__方法格式化参数不匹配

你的__str__方法里的格式字符串有4个占位符:{} (#{}): name: {:3}, neighbors: {},但调用format时只传了2个参数(self.name和self.neighbors)。当Python尝试填充第3个占位符{:3}时,找不到对应的参数,就会抛出tuple index out of range错误。

2. 其他隐藏问题

除了这个索引错误,你的代码还有两个明显的逻辑问题:

  • __init__方法里忽略了传入的neighbors参数:你把self.neighbors直接初始化为空列表,导致实例化时传入的[5,8,2]完全没被使用。
  • add_record方法引用了未定义的self.records:初始化方法里没有创建self.records列表,调用这个方法会触发AttributeError。

修复后的完整代码

class Node():
    def __init__(self, name, neighbors):
        self.name = name
        # 保留传入的邻居列表(如果需要避免外部修改可以用neighbors.copy())
        self.neighbors = neighbors
        self.n_records = 0
        # 初始化records列表供add_record方法使用
        self.records = []
    
    def __str__(self):
        # 调整格式字符串与参数数量匹配,优化了输出可读性
        s = "Node {}: name: {:3}, neighbors: {}, record count: {}"
        return s.format(self.name, self.name, self.neighbors, self.n_records)
    
    def add_record(self, rec):
        self.records.append(rec)
        self.n_records += 1

测试验证

现在实例化Node就不会报错了:

node = Node(3, [5,8,2])
print(node)
# 输出:Node 3: name:   3, neighbors: [5, 8, 2], record count: 0

node.add_record("test_rec")
print(node)
# 输出:Node 3: name:   3, neighbors: [5, 8, 2], record count: 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:37:19