728x90
SyntaxError: no binding for nonlocal 'x' found
오류는 nonlocal
키워드를 사용할 때, 해당 변수 x
가 상위 지역 범위에 존재하지 않는 경우 발생합니다. nonlocal
은 중첩 함수 내부에서 바깥 함수의 지역 변수에 접근하고자 할 때 사용하는 키워드이지만, 만약 상위 함수의 범위에 해당 이름이 존재하지 않으면 파이썬은 오류를 발생시킵니다.
이 오류는 nonlocal
을 사용하려 했지만 참조할 대상이 없는 경우로, 일반적으로 상위 함수에 변수를 선언하지 않았거나, global
과 혼동하여 사용한 경우 자주 발생합니다.
● 오류 발생 예시
def outer():
def inner():
nonlocal x
x = 10
위 코드에서 x
는 outer
함수의 지역 변수로 존재하지 않기 때문에, nonlocal x
는 유효하지 않아 오류가 발생합니다.
SyntaxError: no binding for nonlocal 'x' found
● 올바른 코드 예시
def outer():
x = 5
def inner():
nonlocal x
x = 10
inner()
print(x)
이 경우 x
는 outer
함수 내에 정의되어 있기 때문에 inner
함수에서 nonlocal
로 올바르게 참조할 수 있습니다.
● 자주 하는 실수
- 바깥 함수에 변수를 선언하지 않고
nonlocal
만 사용하는 경우 global
과nonlocal
의 개념을 혼동하는 경우- 중첩 구조가 없는 함수에서
nonlocal
을 사용하는 경우
● 개념 정리
global
: 전역 범위에 있는 변수에 접근nonlocal
: 현재 함수보다 한 단계 바깥 함수의 지역 변수에 접근
● 결론
nonlocal
을 사용할 때는 반드시 바로 바깥쪽 함수의 지역 변수로 해당 이름이 정의되어 있어야 하며, 존재하지 않으면 no binding for nonlocal
오류가 발생합니다. 중첩 함수에서 변수 값을 변경하고자 할 때는 변수 선언의 위치와 범위를 명확히 파악한 후 nonlocal
키워드를 사용하는 것이 중요합니다.
728x90
'프로그래밍언어 > 파이썬[Error]' 카테고리의 다른 글
[파이썬][Error] 016. SyntaxError - invalid syntax in match-case (0) | 2025.05.26 |
---|---|
[파이썬][Error] 015. IndentationError - expected an indented block (0) | 2025.05.26 |
[파이썬][Error] 013. TypeError - __enter__ returned non-context-manager (0) | 2025.05.26 |
[파이썬][Error] 012. SyntaxError - 'finally' without 'try' (0) | 2025.05.26 |
[파이썬][Error] 011. SyntaxError - lambda cannot contain assignment (0) | 2025.05.26 |