调用全局变量时未解析的引用?

时间:2017-07-03 06:57:18

标签: python python-3.x

我打算在函数' In_queue'中调用两个全局变量(' head'和' tail'),然后调用'头'成功但尾巴'不。错误是:

UnboundLocalError: local variable 'tail' referenced before assignment.

在另一个函数' Out_queue'中,两个变量都成功调用。

代码:

tail = NODE(VALUE())
head = NODE(VALUE())
def In_queue():
    try:
        node = Create_node(*(Get_value()))
    except:
        print("OVERFLOW: No room availible!\n")
        exit(0)
    if not head.nextprt or not tail.nextprt:
        tail.nextprt = head.nextprt = node
    else:
        tail.nextprt = node
        tail = node
    return None
def Out_queue():
    if head.nextprt == tail.nextprt:
        if not head.nextprt:
            print("UNDERFLOW: the queue is empty!\n")
            exit(0)
        else:
            node = head.nextprt
            head.nextprt = tail.nextprt = None
            return node.value
    else:
        node = head.nextprt
        head.nextprt = node.nextprt
        return node.value

1 个答案:

答案 0 :(得分:3)

好的,那么为什么头部工作但尾部没有?正如其他人在评论中提到的那样,为tail分配值会导致它被视为局部变量。如果是head,则不会为其分配任何内容,因此解释器会在本地和全局范围内查找它。要确保tailhead都用作全局变量,您应该使用global tail, head。像这样:

def In_queue():
    global tail, head
    try:
        node = Create_node(*(Get_value()))
    except:
        print("OVERFLOW: No room availible!\n")
        exit(0)
    if not head.nextprt or not tail.nextprt:
        tail.nextprt = head.nextprt = node
    else:
        tail.nextprt = node
        tail = node
    return None