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
相关产品推荐
相关产品推荐

