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

Python中TreeNode实例__str__方法报NoneType无name属性求助

问题分析与解决方案

从你的代码和报错细节来看,问题的核心出在TreeNode类的__str__方法里:

def __str__(self):
    string = "---- TreeNode Object ---- \n" + \
    "name: {} \n".format(self.name) + \
    "parent: {} \n".format(self.parent.name) + \  # 这里是错误根源
    "number of children: {} \n".format(len(self.children))
    return string

当你打印tmp["650"]时,触发了这个__str__方法,但这个节点的parent应该是None(大概率是根节点),代码直接访问self.parent.name就会抛出'NoneType' object has no attribute 'name'的错误。而像tmp["632"]这类节点的parent是有效的TreeNode实例(也就是tmp["650"]),所以访问parent.name不会出问题。

修复方案

你只需要在__str__方法里处理parent为None的边界情况即可,比如:

def __str__(self):
    # 先判断父节点是否存在,不存在则显示"None"
    parent_name = self.parent.name if self.parent is not None else "None"
    string = "---- TreeNode Object ---- \n" + \
    "name: {} \n".format(self.name) + \
    "parent: {} \n".format(parent_name) + \
    "number of children: {} \n".format(len(self.children))
    return string

这样不管节点是根节点(父节点为None)还是普通子节点,都能正常生成字符串,不会抛出异常了。你也可以再核对下tmp["650"]的初始化代码,它的parent参数应该确实传了None,这本身是合理的根节点逻辑,只是之前的__str__方法没考虑到这种情况而已。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:01:12