我最近遇到了这种UnboundLocalError的情况,这看起来很奇怪:importpprintdefmain():if'pprint'inglobals():print'pprintisinglobals()'pprint.pprint('Spam')frompprintimportpprintpprint('Eggs')if__name__=='__main__':main()产生:pprintisinglobals()Traceback(mostrecentcalllast):File"weird.py",line9,inif__name__=='__main__':main(
这个问题在这里已经有了答案:Isitpossibletomodifyavariableinpythonthatisinanouter(enclosing),butnotglobal,scope?(9个回答)关闭2个月前。我有这样的代码(简化):defouter():ctr=0definner():ctr+=1inner()但是ctr会报错:Traceback(mostrecentcalllast):File"foo.py",line9,inouter()File"foo.py",line7,inouterinner()File"foo.py",line5,ininnerctr+=1Un
这个问题在这里已经有了答案:UnboundLocalErroronlocalvariablewhenreassignedafterfirstuse(13个回答)Usingglobalvariablesinafunction(24个回答)关闭8年前。我正在努力解决这个问题:c=1deff(n):printc+ndefg(n):c=c+nf(1)#=>2g(1)#=>UnboundLocalError:localvariable'c'referencedbeforeassignment谢谢! 最佳答案 在函数中,分配给的变量默认被视为局
以下代码在Python2.5和3.0中均按预期工作:a,b,c=(1,2,3)print(a,b,c)deftest():print(a)print(b)print(c)#(A)#c+=1#(B)test()但是,当我取消注释行(B)时,我在行(A)处收到UnboundLocalError:'c'notassigned。a和b的值打印正确。我不明白:为什么在第(A)行出现运行时错误,因为第(B)行后面有一个语句?为什么变量a和b按预期打印,而print(c)引发错误?我能想到的唯一解释是赋值c+=1创建了一个local变量c,它优先于全局c。但是变量如何在它存在之前“窃取”范围呢?为什
这个问题在这里已经有了答案:Usingglobalvariablesinafunction(24个回答)UnboundLocalErroronlocalvariablewhenreassignedafterfirstuse(13个回答)关闭5年前.我在这里做错了什么?counter=0defincrement():counter+=1increment()上面的代码抛出一个UnboundLocalError。 最佳答案 Python没有变量声明,所以它必须找出scope变量本身。它通过一个简单的规则来做到这一点:如果在函数内部对变量
这个问题在这里已经有了答案:Usingglobalvariablesinafunction(24个回答)UnboundLocalErroronlocalvariablewhenreassignedafterfirstuse(13个回答)关闭5年前.我在这里做错了什么?counter=0defincrement():counter+=1increment()上面的代码抛出一个UnboundLocalError。 最佳答案 Python没有变量声明,所以它必须找出scope变量本身。它通过一个简单的规则来做到这一点:如果在函数内部对变量
总结:内部函数,不修改全局变量可以访问全局变量内部函数,修改同名全局变量,则python会认为它是一个局部变量在内部函数修改同名全局变量之前调用变量名称(如printsum),则引发Unbound-LocalError在程序中设置的sum属于全局变量,而在函数中没有sum的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样python就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR或者Unbound-LocalError,这取决于python版本。)如果内部函数有引用外部函数的同名
总结:内部函数,不修改全局变量可以访问全局变量内部函数,修改同名全局变量,则python会认为它是一个局部变量在内部函数修改同名全局变量之前调用变量名称(如printsum),则引发Unbound-LocalError在程序中设置的sum属于全局变量,而在函数中没有sum的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样python就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR或者Unbound-LocalError,这取决于python版本。)如果内部函数有引用外部函数的同名