[python] UnboundLocalError: local variable 'var' referenced before assignment
현상
>>> var = []
>>> def test1():
var.append(1)
>>> test1()
>>>
>>> def test2():
var.append(1)
var = ['mistake'] # test1에서 이것이 추가됨
>>> test2()
var.append(1)
UnboundLocalError: local variable 'var' referenced before assignment
- 함수 test1은 UnboundLocalError 없이 정상적으로 잘 동작하지만, test2는 그렇지 않음.
원인
- 파이썬에서 함수 내에서 할당된 변수는 무조건 지역변수로 간주됨. 이것은 할당 이전까지 해당 변수가 어떻게 쓰였는지와는 관계가 없음.
- 위 예시의 test1 함수 내에서는 var이 별도로 할당되고 있지 않기에 test1의 var은 전역 스코프의 var에 바운드되고 문제를 일으키지 않음.
- 그렇지만 test2에서는 var = ['mistake']와 같이 명시적으로 선언되고 있기에 이 함수 내에서 var는 지역변수로 간주됨. 그런데 그 지역변수가 할당 이전에 var.append(1)와 같이 쓰이고 있으므로 UnboundLocalError가 발생
해결방법
- 로컬 변수 할당을 변수 사용 이전으로 옮기기
>>> var = []
>>> def test2():
var = ['mistake']
var.append(1) # ['mistake', 1]
>>> test2()
>>> var # 동일한 이름의 로컬 변수에 들어있는 객체 조작은 전역 변수에 영향을 미치지 않음.
[]
- global 키워드 사용
>>> var = []
>>> def test2():
global var
var.append(1)
var = ['mistake']
>>> test2()
>>> var
[]
1.과 2.가 서로 다른 결과를 만들어내기에 상황에 맞는 방법 적용 필요.
Author And Source
이 문제에 관하여([python] UnboundLocalError: local variable 'var' referenced before assignment), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@juju08217/python-UnboundLocalError-local-variable-var-referenced-before-assignment저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)