我打算在函数' 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
答案 0 :(得分:3)
好的,那么为什么头部工作但尾部没有?正如其他人在评论中提到的那样,为tail分配值会导致它被视为局部变量。如果是head,则不会为其分配任何内容,因此解释器会在本地和全局范围内查找它。要确保tail
和head
都用作全局变量,您应该使用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