본문 바로가기
개발/Python

[python] 할당 전에 참조되는 지역 변수

by parkkingcar 2022. 5. 22.

 

 

파이썬에서 UnboundLocalError:local variable '변수명' referenced before assignment 오류가 발생할 때

이유와 해결방법에 대해 알아봅니다.

 

 

 

a = 0

def myfunc():
	a += 1
    	print(a)
    
myfunc()
print(a)

 

위 예제코드를 실행하면 다음과 같은 에러가 발생합니다.

UnboundLocalError:local variable 'a' referenced before assignment 

 

 

파이썬에서는 변수를 사용하기 전에 선언하거나 초기화 할 필요가 없고, 변수는 기본적으로 항상 로컬로 간주됩니다.

 

따라서 프로그램이 전역 변수를 지정하지 않고 함수 내의 전역 변수에 액세스하려고 하면

참조되는 변수가 지역 변수로 간주되므로 위와 같은 에러를 반환합니다.

 

 

 

a = 0

def myfunc():
	a = 0
	a += 1
    	print(a)
    
myfunc()
print(a)

#출력: 1
#출력: 0

 

 

이때 위와같이 myfunc()함수안에 a를 먼저 선언한 후 a+=1와 print(a)를 하면 에러를 발생하지 않습니다.

하지만 그렇게 되면 함수안의 a는 지역변수가 되고, 맨 처음 선언한 전역변수 a는 0으로 출력됩니다.

 

 

 

 

 

 

이를 해결하기 위해 global (nonlocal) 키워드를 사용하여 변수를 전역으로 선언 할 수 있습니다.

 

a = 0

def myfunc():
	global a
	a += 1
    
myfunc()
print(a)

#출력: 1

 

 

 

 

댓글