TroubleShooting

UnboundLocalError: local variable 'result1' referenced before assignment 해결

JackSmith 2023. 6. 3.

 

result1 = 0
result2 = 0

def add1(num):
    #global result1
    result1 += num
    return result1



def add2(num):
    #global result2
    result2 += num
    return result2


print(add1(3))
print(add1(4))

print(add2(3))
print(add2(7))

위 코드를 실행하면 아래와 같은 오류가 뜨게 된다.

이는 대표적으로 외부에서 선언된 변수를 함수속에서 호출하고자 할때 발생하는 전형적인 실수이다.

결론부터 말하져면, 에러가 터지는 변수들에 대해서 함수 안에서 'global' 선언을 해줄 필요가 있다.

result1 = 0
result2 = 0

def add1(num):
    global result1
    result1 += num
    return result1



def add2(num):
    global result2
    result2 += num
    return result2


print(add1(3))
print(add1(4))

print(add2(3))
print(add2(7))

 

해설

외부에서 선언된 변수를 함수 속에서 call하려고 하면 'UnboundLocalError'가 발생하며 프로그램이 터진다.

'UnboundLocalError'를 방지하기 위해, 외부변수를 가져올 때는 

"여기 result1 있지? 이거 외부에서 가져온 변수야. 근데 여기 함수안에서 쓰고 싶어" 라는 메시지를 

인터프리터에게 전달해야 한다.

해당 정보를 선언하고자 'global' 키워드를 사용한다.

 

-comment-

함수가 호출되면 새롭게 분기가 되므로 깊게 보았을때, 파이프라인이 하나 더 생성된다.

비유하자면, 뿌리 줄기가 하나 더 생긴다고 볼 수 있는 건데, 위에서 선언된 줄기와 해당 줄기는 영역이 나뉘어져 있으므로,

기본적으로 다른 영역이다. 따라서 예외적으로 분기를 넘어서 전역변수를 지역변수 안으로 가져올 때는 'Unbound' 규칙을

깨버리고자 global 키워드를 선언해주는 행위를 한다고 볼 수 있을 것 같다.

 

 

 

참고링크:

 

python error 해결법 : local variable 'df' referenced before assignment

파이썬에서 외부에 선언한 변수를 함수속에서 호출하고자 할때 아래와 같은 오류가나는 경우가 있다. 코드 df = pd.DataFrame(columns=unique_genres) def checkGenres(x): temp = {'a': 1} df = df.append(temp,ignore_index=Tru

wotres.tistory.com

 

댓글