본문 바로가기
프로그래밍언어/파이썬[Error]

[파이썬][Error] 014. SyntaxError - no binding for nonlocal 'x' found

by about_IT 2025. 5. 26.
728x90

SyntaxError: no binding for nonlocal 'x' found 오류는 nonlocal 키워드를 사용할 때, 해당 변수 x가 상위 지역 범위에 존재하지 않는 경우 발생합니다. nonlocal은 중첩 함수 내부에서 바깥 함수의 지역 변수에 접근하고자 할 때 사용하는 키워드이지만, 만약 상위 함수의 범위에 해당 이름이 존재하지 않으면 파이썬은 오류를 발생시킵니다.

이 오류는 nonlocal을 사용하려 했지만 참조할 대상이 없는 경우로, 일반적으로 상위 함수에 변수를 선언하지 않았거나, global과 혼동하여 사용한 경우 자주 발생합니다.

● 오류 발생 예시

def outer():
    def inner():
        nonlocal x
        x = 10

위 코드에서 xouter 함수의 지역 변수로 존재하지 않기 때문에, nonlocal x는 유효하지 않아 오류가 발생합니다.

SyntaxError: no binding for nonlocal 'x' found

● 올바른 코드 예시

def outer():
    x = 5
    def inner():
        nonlocal x
        x = 10
    inner()
    print(x)

이 경우 xouter 함수 내에 정의되어 있기 때문에 inner 함수에서 nonlocal로 올바르게 참조할 수 있습니다.

● 자주 하는 실수

  • 바깥 함수에 변수를 선언하지 않고 nonlocal만 사용하는 경우
  • globalnonlocal의 개념을 혼동하는 경우
  • 중첩 구조가 없는 함수에서 nonlocal을 사용하는 경우

● 개념 정리

  • global: 전역 범위에 있는 변수에 접근
  • nonlocal: 현재 함수보다 한 단계 바깥 함수의 지역 변수에 접근

● 결론

nonlocal을 사용할 때는 반드시 바로 바깥쪽 함수의 지역 변수로 해당 이름이 정의되어 있어야 하며, 존재하지 않으면 no binding for nonlocal 오류가 발생합니다. 중첩 함수에서 변수 값을 변경하고자 할 때는 변수 선언의 위치와 범위를 명확히 파악한 후 nonlocal 키워드를 사용하는 것이 중요합니다.

728x90