한 개만 더, 한 발만 더

어제보다 조금 더 나은 오늘을 만들기 위해 노력합니다.

파이썬/에러 코드

[Python] UnboundLocalError

토이판다 2019. 12. 25. 13:20

Icheon, Korea 2014

// 원래 문제

 

Django 프로젝트 중 발견한 오류이다.

 

전역 변수를 함수 내에서 수정하려고 했을 때 발생하는 오류이다.

 

Python과 관련이 있고 Django와는 무관한 것 같다.

 

대충 rooms가 없는데 왜 쓰냐는 뜻(?)

오류가 발생한 곳은 line 116이다.

rooms를 찾아서

아래 코드를 살펴보면 get 함수에서 rooms를 리턴했지만 그것은 if문 안의 if문에 선언되어 있다.

 

없는데 있다고 하니까

이것은 자바스크립트의 스코프, 호이스팅과 비슷한 것일까?

 

오류에 대해서 좀 찾아보았다.

 

// 예제 1

 

아래 코드를 실행하면 정상적으로 110이 출력된다.

 

정상

 

그러나 아래와 같이 함수 내에서 line 1의 n을 사용하려고 하면 unboundlocalerror가 발생한다.

 

함수 안에서는 함수 밖에 있는 변수에 값을 할당할 수 없다.

 

(마찬가지로 함수 밖에서 함수 안에 있는 변수를 사용할 수 없다)

 

오류

n = n + m이라고 했을 때, 함수 스코프 안에서의 n은 line 1에 있는 n이 아니라 함수 내의 로컬 변수로 간주된다.

 

따라서, n을 전역변수로 정의해주면 정상적으로 동작한다.

 

그런데 'global n'과 같이 코드를 쓰는 것이 썩 좋아보이지는 않는다.

 

다시 정상

 

==================== 이 내용에 대해서는 추가적인 공부가 더 필요하다 ====================

*참고

https://www.toptal.com/python/top-10-mistakes-that-python-programmers-make