파이썬 referenced before assignment에러 이유와 해결

조홍식·2022년 8월 22일
1
post-custom-banner

파이썬의 전역변수와 지역변수를 다루며
"할당 전에 참조되는 로컬변수"라는 개념에 대해 알게 되었다.

	a = 10
    
    def prac():
 		print(a)
        
    print(a)
    prac()

변수 a가 prac함수 안에 존재하지 않으니
a를 전역네임스페이스에서 함수안으로 땡겨와 사용할 수 있게 한 것이다.

하지만 다음의 코드를 보자

	a = 10
    
    def prac2():
    	a += 10
        print(a)
        
    print(a)
    prac2()

위의 코드는 local variable 'a' referenced before assignment 에러가난다

왜 "prac()에서는 a가 없을때 전역네임스페이스에서 잘 가져왔는데 prac2()에서는 가져오지 못하는걸까 ?"라고 생각했다.

이유는 앞서 말한 "할당 전에 참조되는 로컬변수"때문인데 prac2()안의 a+=10 부분에서 할당이 이루어진다.

하지만 이 때 파이썬은 a를 네임스페이스에서 가져오지 않고
새로운 지역변수의 선언이라 알아듣기에
먼저 참조가 되지않았다는 에러가 발생하는 것이다.

따라서 global선언 없이 함수 내에서 전역변수를 사용할 경우
print(a) , if a == 1: 과 같이 조회하는 기능만 가능하다.

a값을 변경하는 것과 같이 "할당"을 해주려면 global선언이 필수적이다.

	a = 10
    
    def prac2():
    	global a
    	a += 10
        print(a)
        
    print(a)
    prac2()
    
    #출력1 : 10
   	#출력2 : 20      
profile
work hard!
post-custom-banner

0개의 댓글