我在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
只是为了安全并确保它在我所有方法的范围。
答案 0 :(得分:4)
您需要将行global currentTok
放入功能,而不是主模块。
currentTok=0
def demand(s):
global currentTok
if tokenObjects[currentTok+1].category==s:
# etc.
global
关键字告诉您的函数它需要在全局范围内查找该变量。
答案 1 :(得分:2)
您需要在函数定义中声明它是全局的,而不是在全局范围内。
否则,Python解释器看到它在函数内部使用,假定它是一个局部变量,然后在你做的第一件事是引用它时抱怨,而不是分配给它。