【问题标题】:Getting an error "Parent node xxx is not of type 'NodeMixin'" when attempting to create AnyTree tree尝试创建 AnyTree 树时出现错误“父节点 xxx 不是 'NodeMixin' 类型”
【发布时间】:2020-07-02 21:15:36
【问题描述】:

关于 StackOverflow 的第一个问题。无法找到此问题的其他实例,这使我相信我做错了什么。

我正在尝试根据物料清单 (BOM) 数据创建树。首先,我只是想设置基本的父>子​​节点。

from anytree import Node, RenderTree, find_by_attr, NodeMixin
import pandas as pd

# Create Dataframe from csv file
df1 = pd.read_csv(r'filepath') # filepath only used for example


nodes = {} # Store created nodes

root = Node('root') # Setup root node

# Iterate over df and create parent/child nodes
for index, row in df1.iterrows():
    pitem = row['EBPART'].strip()  # get parent item number
    citem = row['EBCOMP'].strip() # get child item number
    nodes[pitem] = Node(pitem,parent=root) # create child node
    nodes[citem] = Node(citem,parent=pitem) # create parent node

基本上在迭代期间,我尝试创建父节点(不会引发错误),然后使用先前创建的节点作为其父节点来创建子节点。但是,我不断收到此错误:

anytree.node.exceptions.TreeError: Parent node 'Product1' is not of type 'NodeMixin'.

rendertree(root)的结果如下:

print(RenderTree(root))
Node('/root')
└── Node('/root/322601101')

这是我正在阅读的 csv 的简化版本:

Sample csv structure

非常感谢任何帮助!

【问题讨论】:

    标签: python anytree


    【解决方案1】:

    从这个Github Issue 看来,您需要在根节点中显式设置parent=None。而且似乎AnyNode 期望 **kwargs。 (我没有阅读文档,所以我不能同意)因此您还应该修改您的pitemcitem

    【讨论】:

    • 感谢您的回复!我应该提到我之前曾尝试将父级显式设置为无。它似乎没有什么不同,但我已经离开以防万一。如果不是太麻烦,您能否详细说明修改pitem和citem的意思?我一直在尝试使用文档(链接如下)并使用相同的方式创建我的节点。我尝试在节点创建时使用 'name' 和 'id' kwargs,但仍然遇到相同的错误。不过也有可能我理解错了。 rb.gy/uobewi
    【解决方案2】:

    下面的行看起来不错:

    node.name: strnode.parent: Node 在哪里

    nodes[pitem] = Node(pitem,parent=root) # create child node
    

    这个不是:

    nodes[citem] = Node(citem,parent=pitem)
    

    这里是node.name: strnode.parent: str,应该是Node 类型

    另外设置node.parent = None,与否完全一样。 **kwargs 也是如此,它只是您可以为节点设置的附加属性,与您面临的错误无关。

    实际上你需要先声明根节点,但是你这样做了,错误不是因为那个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2021-07-31
      • 1970-01-01
      相关资源
      最近更新 更多