UnboundLocalError가 발생하는 이유는 함수 밖에서 선언한 변수를 함수 내에서 사용했기 때문이다.
함수 내에서 사용했다는 의미가 무엇이냐 하면,
함수 func() 밖에서 x라는 변수를 선언하고 1을 변수 x의 값으로 부여했다.
그다음 함수를 정의하는 과정에서 함수 밖에 위치한 변수인 x를 사용하였다.
line by line으로 실행되니 먼저 실행되는 x=1 다음에 함수를 정의해 주었으니 문제 될 것이 없지 않느냐라고 생각할 수도 있다.
하지만 에러메시지를 보면 이 말은 잘못됨을 알 수 있다.
local variable 'x' referenced before assignment = 함수 내에서 값을 할당하려고 보니 '지역변수' x가 참조되었습니다.
이런 의미이다. 그러므로 x는 먼저 작성된 코드라고 해서 이후의 코드에서 모두 사용할 수 있는 것이 아니다.
그럼 함수에서 x를 사용하려면 어떻게 해야 하는 것일까? x를 지역변수가 아닌 전역변수로 지정해주면 된다.
그럼 함수 내에서 이미 선언된 변수 x를 어떻게 전역변수로 사용할 수 있을까? x를 전역 변수로 사용하겠다고 함수 내에 global x 이 한 문장만 적어주면 된다.
x = 1
def func():
global x # x를 전역변수로 사용
x += 1
# print(x)
func()
위 코드를 실행시켜보면 어떤 에러도 발생하지 않고 정상적으로 함수가 작동한다.
func() 함수의 결과를 확인하기 위해 print(x)를 찍어보면 정상적으로 2가 출력된다.
반응형