파이썬에서 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
댓글