Python 变量明显为局部变量时的UnboundLocalError
我有一个类似的程序:Python 变量明显为局部变量时的UnboundLocalError,python,global,Python,Global,我有一个类似的程序: curpuz = 1 def puzzle(req,_): puzzledat = json.loads(open('puzzles.txt','r').read()) puzzleque = puzzledat[str(curpuz)]['q'] req.say('Current puzzle: ' + puzzleque + ' - !ans <answer>') def puzzlea(req,arg): puzzled
curpuz = 1
def puzzle(req,_):
puzzledat = json.loads(open('puzzles.txt','r').read())
puzzleque = puzzledat[str(curpuz)]['q']
req.say('Current puzzle: ' + puzzleque + ' - !ans <answer>')
def puzzlea(req,arg):
puzzledat = json.loads(open('puzzles.txt','r').read())
puzzleans = puzzledat[str(curpuz)]['a']
if arg[0] == puzzleans:
req.say('%tip ' + req.nick + ' 50 -- ' + req.nick + ' got the correct answer! Use !puzzle to get the next puzzle!')
try:
puzzledat = json.loads(open('puzzles.txt','r').read())
curpuz += 1
puzzleque = puzzledat[str(curpuz)]['q']
puzzleans = puzzledat[str(curpuz)]['a']
except:
req.say("Uh oh no more puzzles :(")
puzzleans = 'no more'
else:
req.reply('Incorrect')
curpuz=1
def拼图(要求):
puzzdat=json.load(打开('puzzles.txt','r').read())
puzzle=puzzdat[str(curpuz)]['q']
请求语句('当前拼图:'+puzzleque+'-!ans')
def A(请求,参数):
puzzdat=json.load(打开('puzzles.txt','r').read())
puzztans=puzzdat[str(curpuz)]['a']
如果arg[0]==谜题:
请求说('%tip'+req.nick+'50--'+req.nick+'得到了正确的答案!使用!拼图获得下一个拼图!')
尝试:
puzzdat=json.load(打开('puzzles.txt','r').read())
curpuz+=1
puzzle=puzzdat[str(curpuz)]['q']
puzztans=puzzdat[str(curpuz)]['a']
除:
要求说(“哦,没有更多的谜题:(”)
拼图游戏=‘不再’
其他:
请求回复(“不正确”)
但是我继续得到一个未绑定的LocalError(“赋值前引用的局部变量'curpuz')
,即使该变量显然是局部变量。试试这个
def puzzlea(req,arg):
global curpuz
然而,它是局部的,只是没有绑定。如果它是全局的,你会得到一个
NameError
。curpz
不是puzza
的局部变量。你可以像在puzzle()
中那样隐式引用一个模块范围变量,但要像在puzza
中那样分配给它(curpuz==1
),您需要在函数中本地绑定它,或者(正如您在这里可能希望的那样)在函数范围内显式地将其标记为全局。@SilasRay:它在puzza
中是局部的,因为它被赋值给了。@MartijnPieters足够正确。我应该说,他要引用的模块级变量在函数中没有局部绑定,所以赋值是对具有相同名称的局部未绑定变量进行的@SilasRay:函数中的第二行尝试访问名称;这是UnboundLocalName
异常的来源:puzzans=puzzdat[str(curpuz)]['a']
。