2017-07-18 8 views
-2

"count + = 1"でエラーが発生しました。私はそれを世界的にしようとしましたが、それでも問題はありました。それは何よりも冗談ですが、なぜそれが機能していないのか知りたいのですが。UnboundLocalError:割り当て前にローカル変数 'c​​ount'が参照されています。

import math 
def delT(): 
    #inputs 
    #float inputs 
    #do math 
    #print results 
    global count 
    count=0 
    def getAndValidateNext(): 
     #print menu 
     getNext=input("select something") 
     acceptNext=["things","that","work"] 
     while getNext not in acceptNext: 
      count+=1 
      print("Not a listed option.") 
      if count==5: 
       print("get good.") 
       return 
      return(getAndVadlidateNext()) 
     if getNext in nextRestart: 
      print() 
      return(delT()) 
     if getNext in nextExit: 
      return 
    getAndVadlidateNext() 
delT() 
+0

フルトレースバックしてください。私の目が正しく見えても関数は呼び出されません。 –

+0

'getAndVadlidateNext'とは何ですか? – user2357112

+1

[Pythonのネストされた関数の変数スコープの可能な複製](https://stackoverflow.com/questions/5218895/python-nested-functions-variable-scoping) – janos

答えて

1

globalキーワードを機能に移す必要があります。

count=0 
def getAndValidateInput(): 
    global count 
    #print menu 
    #So on and so forth 

これで、カウント変数にアクセスできるはずです。 Pythonのスコープと関係しています。変数を宣言する必要があります。変数は、関数が定義されている場所だけでなく、それを使用する各関数でグローバルです。

+0

ああです。私はちょうどそれを追加し、それは正常に動作します。それをgetAndValidateNextでグローバルとして宣言しなければならず、グローバルとして0として定義しました。解決しました、ありがとう! – pythonOnlyPls

0

私はかつて、それは範囲としなければならないことが判明し、別の関数定義内に関数定義を持つ同じ問題に遭遇しました。グローバル変数を作成および変更する別々の関数を記述していました。例:

def setcount(x): 
    global count 
    count = x 
def upcount(): 
    global count 
    count += 1 
1

global countは、getAndValidateInput()の機能の中にある必要があります。

関連する問題