2017-07-03 13 views
1

私は関数 'In_queue'で2つのグローバル変数( '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

あなたはローカルに 'tail = node'を割り当てます。 UnboundLocalErrorにはたくさんの質問がありますが、私はさらにいくつかの研究をお勧めします。 – jonrsharpe

+0

変数に代入すると、ローカルになります。グローバルテール変数に代入したい場合は、 'global tail'を関数のどこかに置く必要があります。 – pschill

答えて

1

[OK]を、なぜ頭の仕事が、尾はしませんでしたか?他の人がコメントで述べたように、tailに値を割り当てると、ローカル変数のように扱われました。頭の場合、あなたはそれに何も割り当てなかったので、通訳はローカルとグローバルの範囲でそれを探しました。 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 
関連する問題