0

Python で次のコードを使用すると、バインドされていないローカル エラーが発生し続けます。

xml=[]       
global currentTok
currentTok=0                     

def demand(s):
    if tokenObjects[currentTok+1].category==s:
        currentTok+=1
        return tokenObjects[currentTok]
    else:
        raise Exception("Incorrect type")

def compileExpression():
    xml.append("<expression>")
    xml.append(compileTerm(currentTok))
    print currentTok
    while currentTok<len(tokenObjects) and tokenObjects[currentTok].symbol in op:
        xml.append(tokenObjects[currentTok].printTok())
        currentTok+=1
        print currentTok
        xml.append(compileTerm(currentTok))
    xml.append("</expression>")

def compileTerm():
    string="<term>"
    category=tokenObjects[currentTok].category
    if category=="integerConstant" or category=="stringConstant" or category=="identifier":
        string+=tokenObjects[currentTok].printTok()
        currentTok+=1
    string+="</term>"
    return string

compileExpression()
print xml

以下は、私が得る正確なエラーです:

UnboundLocalError: local variable 'currentTok' referenced before assignment.

currentTokコードの最初の行の 1 つとして明確に初期化するので、これは私には意味がありませんglobal。安全のために、すべてのメソッドの範囲内にあることを確認するためにラベルを付けました。

4

2 に答える 2

4

メインモジュールではなく、関数global currentTokに行を入れる必要があります。

currentTok=0                     

def demand(s):
    global currentTok
    if tokenObjects[currentTok+1].category==s:
        # etc.

キーワードはglobal、グローバルスコープでその変数を検索する必要があることを関数に通知します。

于 2013-02-26T16:51:22.210 に答える
2

グローバルスコープではなく、関数定義内でグローバルに宣言する必要があります。

それ以外の場合、Pythonインタープリターは、関数内で使用されていることを確認し、ローカル変数であると想定し、最初に行うのが、割り当てるのではなく参照する場合に文句を言います。

于 2013-02-26T16:51:41.700 に答える