2014-09-17 4 views
0
someStuff = False 
def spawn(): 
    print(someStuff) 
    if(3==4): 
     someStuff = True 
while (someStuff==False): 
    spawn() 

print (someStuff) 코드가 작동하지 않습니다. "UnboundLocalError : 지역 변수 'someStuff'가 할당 전에 참조되었습니다. '라는 메시지가 표시됩니다. 그러나 if 문이 제거되면 작동합니다.python if 문에서 오류가 발생했습니다.

+0

왜이 오류가 있어요에 대한 질문은 : 당신은 파이썬하도록 할 수 있습니다

은 함수에 global someStuff을 넣어 글로벌 알아? 나는 대답에서 그것을 설명했다. 하지만이 코드는'False'를 인쇄하는 무한 루프에서 당신을 얻습니다 ... – gabe

+0

또한 문제는'if' 문이 아니라'spawn'에서'someStuff = True'를 정의하는 부분입니다. 이 정의를 지우면'someStuff'는 전역 변수를 참조합니다. – gabe

+0

가능한 [Python 변수 범위 오류] 중복 (http://stackoverflow.com/questions/370357/python-variable-scope-error) – chepner

답변

0

이것은 전역 변수가 파이썬에서 작동하는 방식에 이상한 문제입니다.

이 변경 작업을해야합니다 :

이 이런 식으로 발생하는 이유에 대한 자세한 내용은
someStuff = False 
def spawn(): 
    print(someStuff) 
    if(3==4): 
     global someStuff 
     someStuff = True 
while (someStuff==False): 
    spawn() 

: 함수에 this

1

할당 someStuff = True는 로컬 변수 someStuff을 생성됩니다 파이썬을 알려줍니다 참조하십시오. 그런 다음 Python은 에 대한 참조를 print(someStuff)에 넣고 할당하기 전에 불만을 제기합니다. someStuffglobal으로 지정하여이 모호성을 해결해야합니다. 당신의 첫번째 줄을 global someStuff으로 만드십시오. 이렇게하면 이후의 할당이 전역 변수에 영향을줍니다.

1

이있는 경우 :

def spawn(): 
    print(someStuff) 

파이썬 someStuff 전역 변수이어야한다는 가정합니다. 당신이 당신의 기능에 할당이 경우, :

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

은 파이썬은 그것을 사용하기 전에 할당 될 필요가있는 지역 변수입니다 가정합니다.

def spawn(): 
    global someStuff 
    print(someStuff) 
    if 3==4: 
     someStuff = True 
관련 문제