python if语句导致错误

时间:2014-09-17 17:15:18

标签: python variables scope

someStuff = False
def spawn():
    print(someStuff)
    if( 3==4):
       someStuff = True  
while (someStuff==False):
    spawn()

这里的代码,print(someStuff)不起作用,它说" UnboundLocalError:局部变量' someStuff'在转让之前引用"。但是,如果if语句被取出,那么它就可以了。

3 个答案:

答案 0 :(得分:1)

函数中的赋值someStuff = True告诉Python您将创建局部变量someStuff。然后Python在分配和抱怨之前看到someStuff中对print(someStuff)的引用。您需要声明someStuffglobal来解决这种歧义。使您的第一行功能为global someStuff。请注意,这样做意味着后面的赋值将影响全局变量。

答案 1 :(得分:1)

如果你有这个:

def spawn():
     print(someStuff)

python将假设someStuff必须是全局变量。但是,如果您在函数中有作业:

def spawn():
     print(someStuff)
     if 3==4:
         someStuff = True

然后python假定它是一个需要在使用之前分配的局部变量。

您可以通过在函数中添加global someStuff让python知道它是全局的:

def spawn():
     global someStuff
     print(someStuff)
     if 3==4:
         someStuff = True

答案 2 :(得分:0)

这是一个奇怪的问题,全局变量在python中的工作方式。

此更改应该有效:

someStuff = False
def spawn():
    print(someStuff)
    if( 3==4):
       global someStuff
       someStuff = True  
while (someStuff==False):
    spawn()

有关为何会以这种方式发生这种情况的更多信息:请阅读this