treelib展示节点字典数据遇AttributeError,如何正确显示?
解决treelib展示字典类型节点数据的AttributeError问题
问题原因
treelib的show()方法中,data_property参数默认通过属性访问(getattr()函数)读取节点数据,但你传入的节点数据是字典类型,字典只能通过键索引(如dict["name"])获取值,无法用属性形式(dict.name)访问,因此报错。
方法一:将字典数据转为类实例
把字典换成支持属性访问的类对象,比如用dataclass快速定义简单类:
from treelib import Tree, Node from dataclasses import dataclass @dataclass class Person: name: str # 创建树形结构 tree = Tree() tree.create_node(tag="Root", identifier="root", data=Person(name="Alice")) tree.create_node(tag="Child 1", parent="root", data=Person(name="Mark")) tree.create_node(tag="Child 2", parent="root", data=Person(name="Bob")) # 正常使用data_property展示name属性 tree.show(data_property="name")
方法二:自定义节点显示函数
如果不想修改现有数据结构,直接通过node_display参数传入自定义函数,从字典中提取目标值:
from treelib import Tree, Node # 创建带字典数据的树形结构 tree = Tree() tree.create_node(tag="Root", identifier="root", data={"name": "Alice"}) tree.create_node(tag="Child 1", parent="root", data={"name": "Mark"}) tree.create_node(tag="Child 2", parent="root", data={"name": "Bob"}) # 自定义显示逻辑:优先取字典中的name值,否则用节点tag def custom_node_display(node): if isinstance(node.data, dict) and "name" in node.data: return node.data["name"] return node.tag # 调用show时传入自定义函数 tree.show(node_display=custom_node_display)
内容的提问来源于stack exchange,提问作者granular_bastard
相关产品推荐
相关产品推荐

