You& Data_Science & Life

(Error) Global variable 호출시, referenced before assignment에러 발생

1. 문제 상황

: 외부 함수에서 선언한 변수를, 다른 함수 내부에서 불러오기 위해 global로 해당 변수를 선언을 해주었다. 이후 다른 함수에서는 해당 변수가 문제없이 잘 불러와졌으나, 특정 함수에서만 global로 선언한 변수가 존재하지 않는 상태로 호출되었다는 “referenced before assignment” 에러가 발생하였다.

def global_func() :
  global a
  a = 10
global_func()
def local_func_1() :
  print(a)
local_func_1()
# 10 # 정상 

def local_func_2() :
  a += 10 
  print(a)
local_func_2()
# local variable 'a' referenced before assignment # Error 발생

2. 문제 원인

: 실제 a변수는 네임스페이스에 global로 존재하지만, local_func_2 함수의 a += 10 코드에서, Python은 새로운 지역변수를 할당하는 코드라고 인식하게 되면서, a라는 지역변수가 먼저 참조 되지 않았다고 에러를 발생시키는 것이다.

def local_func_2() :
  a += 10  #  Python은 새로운 지역변수를 a를 할당하는 코드라고 인식하기에 이 함수 내에서 지역변수로 선언된 a 변수를 탐색함.
  print(a)
local_func_2()

3. 문제 해결

: 따라서 해당 변수를 사용하고자 한다면, 해당 함수 내부에서 해당 변수를 ‘global’로 선언해주어야 한다.

def local_func_2() :
  global a
  a += 10  #  Python은 새로운 지역변수를 a를 할당하는 코드라고 인식하기에 이 함수 내에서 지역변수로 선언된 a 변수를 탐색함.
  print(a)
local_func_2()
# 20

Reference

[1] 파이썬 referenced before assignment에러 이유와 해결 - 홍식의 개발 HDD님의 블로그