NameError란 무엇인가?
파이썬에서 NameError는 코드가 현재 범위(scope)에 존재하지 않는 이름을 참조할 때 발생하는 예외입니다. 대표적인 예로는 정의되지 않은 변수 이름을 사용하거나, 변수를 선언하기 전에 먼저 사용하는 경우가 있습니다.
이러한 오류는 try-except 블록을 사용하면 손쉽게 잡아낼 수 있으며, 예외 객체를 통해 어떤 이름이 문제였는지 확인할 수 있습니다.
예외 잡기 예제
다음 코드는 정의되지 않은 변수를 참조할 때 발생하는 NameError를 잡고, 예외 메시지와 타입을 함께 출력하는 예제입니다.
import sys
def foo():
print(magnolia)
try:
foo()
except NameError as e:
print("예외 메시지:", e)
print("예외 타입:", type(e).__name__)실행 결과
예외 메시지: name 'magnolia' is not defined
예외 타입: NameError코드 설명
magnolia라는 변수는 어디에도 정의되어 있지 않기 때문에,foo()함수 내부에서 이를 출력하려는 순간 NameError가 발생합니다.except NameError as e구문이 해당 예외를 잡아 프로그램이 비정상적으로 종료되지 않도록 합니다.type(e).__name__을 사용하면 발생한 예외의 클래스 이름(NameError)을 확인할 수 있으며,sys.exc_info()를 통해서도 동일한 정보를 얻을 수 있습니다.
NameError가 자주 발생하는 원인
- 변수나 함수 이름의 오타
- 변수를 정의하기 전에 사용하는 경우
- 함수 내부에서 전역 변수에 잘못 접근하는 경우
- 필요한 모듈이나 객체를 import하지 않은 경우
이처럼 try-except 블록으로 NameError를 처리하면, 사용자에게 친절한 안내 메시지를 제공하거나 기본값으로 대체하는 등 프로그램의 안정성을 크게 높일 수 있습니다.