본문 바로가기
Python

[Python] 파이썬 'UnboundLocalError:local variable referenced before assignment'

by A6K 2022. 10. 19.

파이썬 프로그래밍을 하다보면 가끔씩 'UnboundLocalError:local variable referenced before assignment' 에러를 만나게 된다. 이 에러가 어떤 의미인지 알아보고 에러가 발생하지 않으려면 어떻게 해야하는지 알아보자.

우선 에러를 재현해보자.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

count = 10

def count_down():
    count -= 1
    print(count) 

count_down()

10이라는 초기값을 설정하고  count_down() 함수가 호출될 때마다 1씩 감소하는 카운트 다운 예제다. 이 코드를 실행하면

$ ./test.py 
Traceback (most recent call last):
  File "./test.py", line 10, in <module>
    count_down()
  File "./test.py", line 7, in count_down
    count -= 1
UnboundLocalError: local variable 'count' referenced before assignment

UnboundLocalError: local variable 'count' referenced before assignment 에러가 발생한다.

다른 프로그래밍 언어에서의 경험상 함수의 외부에 있는 변수를 함수 안쪽에서 사용할 경우 전역 변수에 접근해서 그 변수를 바꾸면 될 것 같은데 이런 에러가 발생한다.

위 코드는 다음 코드와 비슷한 의미를 갖는다.

count = 10

def count_down():
    a = a - 1
    print(a) 

count_down()

count 변수값과 상관없이 a 변수의 값을 1 감소시키려한다. 하지만 a - 1을 계산하려고 보니 a 변수에 값이 할당되어 있지 않았기 때문에 이런 에러가 발생한다. 즉, 그냥 쓰면 함수 안쪽에서의 count와 외부에 있는 count의 의미는 연결되지 않는다. 이를 Variable Shadowing이라고 한다.

해결방법

그럼 연결해주면 된다. 여기서의 count 값이 저 위에 있는 count 값이라고 알려주면 된다.

count = 10

def count_down():
    global count
    count -= 1
    print(count) 

count_down()

이렇게 코드를 바꾸면 정상동작한다. 

댓글