未绑定的本地错误

时间:2013-02-26 16:49:54

标签: python global-variables

我在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初始化为我的代码的第一行,我甚至将其标记为global只是为了安全并确保它在我所有方法的范围。

2 个答案:

答案 0 :(得分:4)

您需要将行global currentTok放入功能,而不是主模块。

currentTok=0                     

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

global关键字告诉您的函数它需​​要在全局范围内查找该变量。

答案 1 :(得分:2)

您需要在函数定义中声明它是全局的,而不是在全局范围内。

否则,Python解释器看到它在函数内部使用,假定它是一个局部变量,然后在你做的第一件事是引用它时抱怨,而不是分配给它。