NameError: name '...' is not defined란?

이 오류는 Python 인터프리터가 인식할 수 없는 이름(변수, 함수, 클래스 등)을 만났을 때 발생한다. 기본적으로, 아직 생성되거나 값이 할당되지 않은 것을 사용하려고 시도할 때 나타난다. 초보자들이 가장 흔하게 겪는 오류 중 하나이다.

흔한 원인과 해결 방법

NameError가 발생하는 일반적인 원인과 해결 방법을 살펴보자.

1. 변수 또는 함수 이름 오타

가장 빈번한 원인은 단순한 오타다. Python은 대소문자를 구분하므로 myVariablemyvariable은 다르다.

오류 예시:

message = "Hello, World!"
print(mesage)

출력:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'mesage' is not defined

해결책: 오타를 수정한다. 사용된 이름이 선언된 이름과 일치하는지 확인한다.

message = "Hello, World!"
print(message) # 'mesage'를 'message'로 수정

2. 변수를 할당 전에 사용

변수는 사용하기 전에 반드시 값을 할당해야 한다.

오류 예시:

if some_condition:
    user_name = "Alice"

print(user_name) # some_condition이 False이면 NameError 발생

해결책: 조건문 블록 앞에 변수를 기본값으로 초기화한다.

user_name = "Guest" # 기본값으로 초기화
if some_condition:
    user_name = "Alice"

print(user_name)

3. 변수 범위(Scope) 문제

함수 내부에 정의된 변수(지역 변수)는 함수 밖에서 접근할 수 없다.

오류 예시:

def greet():
    greeting = "함수 내부의 인사말!"
    print(greeting)

greet()
print(greeting) # 여기서 NameError 발생

출력:

함수 내부의 인사말!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'greeting' is not defined

해결책: 함수 밖에서 값이 필요하다면, 함수에서 return하여 새로운 변수에 할당한다.

def greet():
    greeting = "함수 내부의 인사말!"
    return greeting

returned_greeting = greet()
print(returned_greeting)

4. 모듈 또는 이름을 임포트하지 않음

표준 라이브러리나 서드파티 패키지의 모듈을 사용할 때는 먼저 임포트해야 한다.

오류 예시:

# 'math' 모듈 임포트를 잊음
print(math.sqrt(25))

출력:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'math' is not defined

해결책: 스크립트 상단에 필요한 import 구문을 추가한다.

import math

print(math.sqrt(25))

이러한 흔한 실수들을 확인하면 대부분의 NameError 예외를 빠르게 찾아 수정할 수 있다.

Leave a comment