본문 바로가기
08.개발&프로그래밍/1.파이썬

3. Python NameError(정의되지 않은 이름 사용) 완벽 가이드

by JWJ Family 2025. 7. 15.
728x90

 

이 글에서는 Python 프로그래밍을 할 때 흔히 접하게 되는 NameError—정의되지 않은 이름 사용 문제의 정의와 주요 원인, 대표 사례, 해결 방법을 단계별 예제와 함께 살펴봅니다. 마지막에는 다음 챕터인 TypeError: 잘못된 자료형 연산 문제 예고를 포함합니다. 

1. NameError란?

NameError는 프로그램이 참조하려는 이름(변수나 함수 등)이 현재 스코프(scope) 내에 정의되어 있지 않을 때 발생하는 예외입니다. 일반적으로 오타, 선언 순서 오류, 스코프 관리 미숙 등이 원인이며, 실행 중인 스크립트가 해당 이름을 찾지 못할 때 발생합니다. 

2. 주요 발생 원인

  • 변수 오타: 예를 들어 `persn`처럼 잘못된 이름을 사용한 경우 
  • 선언 순서 오류: 변수를 사용하기 전에 선언하지 않아 발생
  • 스코프 범위 문제: 전역 변수와 지역 변수 혼동으로 이름을 찾지 못함 
  • 함수 인자 누락: 매개변수 이름을 잘못 사용하거나 전달하지 않은 경우 
  • 클래스 속성 접근 오류: `self` 파라미터를 빼먹거나 클래스 변수를 잘못 참조했을 때 
  • 대소문자 구분 오류: Python은 대소문자를 구분하므로 `Name`과 `name`을 다르게 인식합니다. 

3. 실습 예제

아래 코드를 실행하면 NameError가 발생하는 대표적인 예시를 확인할 수 있습니다.

# 예제: 변수 오타 및 선언 순서 문제
def greet(name):
    print(f"Hello, {persn}")  # 변수 이름 오타 persn -> name

greet("Python")              

print(greeting)               # greeting 변수를 선언하지 않고 사용

4. 실행 결과 및 설명

터미널에 다음과 같은 메시지가 출력됩니다.

Traceback (most recent call last):
  File "example.py", line 2, in 
    print(f"Hello, {persn}")
NameError: name 'persn' is not defined

During handling of the above exception, another error occurred:

Traceback (most recent call last):
  File "example.py", line 5, in 
    print(greeting)
NameError: name 'greeting' is not defined

첫 번째 에러는 변수 이름 오타로 정의되지 않은 `persn`을 참조한 것이며, 두 번째 에러는 `greeting` 변수를 선언하지 않고 사용했기 때문입니다.

5. 해결 방법 & 디버깅 팁

  1. 오타 확인: 에러 메시지에 표시된 이름을 코드에서 검색하여 정확히 일치하는지 확인합니다.
  2. 변수 선언 위치 점검: 변수를 사용하기 전에 선언되었는지 확인합니다.
  3. 스코프 관리: 전역 변수와 지역 변수를 명확히 구분하거나 필요한 경우 `global` 키워드를 사용합니다. 
  4. IDE/에디터 활용: PyCharm, VS Code의 IntelliSense나 lint 기능으로 정의되지 않은 이름을 사전에 잡아냅니다. 
  5. 함수 인자 확인: 함수 호출 시 올바른 매개변수를 전달했는지, `self` 파라미터를 누락하지 않았는지 점검합니다. 
  6. 테스트 추가: 유닛 테스트를 작성하여 미정의 이름 사용을 조기에 발견합니다.

6. 정리 및 다음 단계

이번 챕터에서는 NameError의 정의, 주요 원인, 실습 예제 및 해결 방법을 다뤘습니다. NameError는 대부분 오타나 스코프 오류로 발생하므로, 에러 메시지를 주의 깊게 읽고 코드 전체를 점검하면 빠르게 해결할 수 있습니다. 다음 챕터에서는 TypeError: 잘못된 자료형 연산을 다룰 예정이니 많은 관심 부탁드립니다.

반응형