为什么这个对象未分配?

时间:2015-07-19 18:30:36

标签: python

Trie是一个节点列表:

class node:
    def __init__(self, parent, daughters, edge):
        self.parent = parent
        self.daughters = daughters
        self.edge = edge
        trie.append(self)
        self.index = len(trie) - 1

def TrieConstruction(patterns):
    global trie
    for node in trie:
        print('Node: ', node.parent, node.daughters, node.edge, node.index)
    trie.append(node(0, [], 0))
    ...

程序给出了这个错误:

File "trieMatching.1.py", line 22, in TrieConstruction
    trie.append(node(0, [], 0))
UnboundLocalError: local variable 'node' referenced before assignment

我不知道为什么这个变量会被取消分配;该功能不了解节点'节点'是一个类,我正在实例化它?

1 个答案:

答案 0 :(得分:4)

您对类和node循环目标使用名称for

class node:
    # ...

for node in trie:
    # ...
trie.append(node(0, [], 0))

如果trie为空,node将在函数中保持未绑定状态,因为没有要分配给它的值。

您必须重命名其中一个。我建议你按照Python style guide使用CamelCase作为类名:

class Node:
您的函数的

和lower_case_with_underscores(以及更能反映责任的名称):

def construct_trie(patterns):