파이썬으로 코드를 작성하고 실행 버튼을 누르는 순간, 화면을 빨간색으로 가득 채우는 에러 메시지(Traceback)를 마주하면 누구나 턱 막히는 기분을 느끼게 됩니다. 특히 코딩을 처음 시작하는 비전공자 입장에서는 "내가 뭔가를 크게 잘못해서 컴퓨터가 고장 난 건 아닌가" 하는 두려움마저 들곤 합니다.

하지만 프로그래밍에서 에러는 실패가 아닌 '컴퓨터의 친절한 힌트'입니다. 어디서, 왜 작동을 멈췄는지 정확히 알려주는 안내판과 같습니다. 더 나아가 실무에서는 에러가 발생했다고 프로그램 전체가 튕기거나 멈추지 않도록 미리 우회로를 만드는 기술인 '예외 처리(Exception Handling)'를 반드시 사용합니다. 오늘은 초보자가 매일 마주치는 대표 에러 5가지와, 이를 우아하게 방어하는 try-except 사용법을 정리해 드립니다.

1. 입문자가 하루에 한 번은 만나는 대표 에러 5가지

에러 메시지의 맨 아랫줄에 적힌 이름을 확인하는 것만으로도 문제의 80%는 즉시 해결할 수 있습니다.

1) SyntaxError (문법 오류)

  • 원인: 파이썬의 문법 규칙을 위반했을 때 발생합니다.

  • 주요 사례: if 문 끝에 콜론(:)을 빠뜨렸거나, 괄호 () 또는 따옴표 ""를 열어두고 닫지 않은 경우입니다.

  • 특징: 이 에러는 코드가 실행되기도 전에 파이썬이 해석을 거부하므로 오타를 가장 먼저 확인해야 합니다.

2) NameError (이름 오류)

  • 원인: 정의되지 않은 변수나 함수 이름을 불러올 때 발생합니다.

  • 주요 사례: age = 20이라고 변수를 만들어놓고 print(Age)처럼 대소문자를 틀리게 쓰거나, 변수를 선언하기 전에 아래쪽에서 먼저 부른 경우입니다.

3) TypeError (타입 오류)

  • 원인: 서로 계산할 수 없는 데이터 타입을 무리하게 결합하려 할 때 발생합니다.

  • 주요 사례: 글자(str)와 숫자(int)를 + 연산자로 직접 더하려고 할 때 나타납니다. ("나이: " + 20)

4) ValueError (값 오류)

  • 원인: 데이터 타입은 맞지만, 내용물의 형태가 올바르지 않을 때 발생합니다.

  • 주요 사례: int("123")은 정상 작동하지만, 숫자로 바꿀 수 없는 문자열인 int("안녕")을 정수로 변환하려 할 때 발생합니다.

5) IndexError (인덱스 범위 초과 오류)

  • 원인: 리스트나 문자열에 존재하지 않는 순서(인덱스)의 값을 가져오려 할 때 발생합니다.

  • 주요 사례: 데이터가 3개 들어있는 리스트(0, 1, 2)에서 4번째 값인 list[3]을 불러올 때 발생합니다.


2. 프로그램이 튕기지 않게 막는 try-except 예외 처리

사용자가 숫자를 입력해야 하는 칸에 한글이나 문자를 입력했다고 해서 프로그램이 그대로 다운되어 버린다면 좋은 프로그램이라고 할 수 없습니다. 이처럼 예상치 못한 에러가 터져도 정상적으로 다음 코드를 실행하도록 만드는 도구가 바로 try-except 구문입니다.

기본 구조

Python
try:
    # 에러가 발생할 가능성이 있는 코드
    number = int(input("숫자를 입력하세요: "))
    print(10 / number)
except ValueError:
    # ValueError가 발생했을 때 실행할 코드
    print("문자가 아닌 올바른 숫자를 입력해 주세요.")
except ZeroDivisionError:
    # 0으로 나눌 때 발생하는 에러 처리
    print("0으로는 숫자를 나눌 수 없습니다.")
  1. try 블록: 위험 요소가 있는 코드를 집어넣습니다. 파이썬은 이 구간을 실행하다가 에러가 발생하는지 감시합니다.

  2. except 블록: try 내부에서 특정 에러가 터지면, 프로그램을 즉시 멈추는 대신 except 구문 안으로 들어와 준비된 안내 문구를 출력하고 정상 흐름을 유지합니다.


3. 예외 처리를 고급스럽게 만드는 else와 finally

try-except 구조 뒤에는 상황에 따라 else와 finally를 붙여 훨씬 탄탄한 로직을 완성할 수 있습니다.

  • else: try 블록에서 에러가 전혀 발생하지 않고 정상 실행되었을 때만 작동합니다.

  • finally: 에러 발생 여부와 상관없이 무조건 마지막에 실행됩니다. (파일을 닫거나, DB 연결을 해제하는 등 뒷정리 작업에 주로 쓰입니다.)

Python
try:
    file = open("data.txt", "r")
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
else:
    print("파일을 성공적으로 읽었습니다.")
    # 파일 내용 처리...
finally:
    print("시스템을 안전하게 종료합니다.")


4. 예외 처리 작성 시 주의해야 할 1가지 실수

초보자들이 코드를 작성할 때 에러 처리가 귀찮다고 아래처럼 작성하는 경우가 있습니다.

Python
# [주의] 어떤 에러인지 명시하지 않은 위험한 작성법
try:
    # 복잡한 코드...
except:
    print("에러가 발생했습니다.")

어떤 종류의 에러가 터졌는지 명시하지 않고 단순 except:로 뭉뚱그려 놓으면, 사용자의 입력 오류뿐만 아니라 코드 자체의 오타나 변수명 오류까지 모두 숨겨버립니다. 이로 인해 어디서 버그가 생겼는지 찾기 매우 힘들어지므로, 반드시 except ValueError:처럼 예상되는 에러의 이름을 구체적으로 적어주는 습관을 들여야 합니다.

핵심요약

  • SyntaxError, NameError, TypeError, ValueError, IndexError는 파이썬에서 가장 자주 마주치는 5가지 대표 에러입니다.

  • try-except 구문을 활용하면 에러가 발생해도 프로그램이 갑자기 중단되지 않고 안정적으로 작동하도록 제어할 수 있습니다.

  • except 구문을 사용할 때는 에러 종류를 무작정 숨기지 않고, 처리하고자 하는 에러명을 구체적으로 명시해야 버그 추적이 쉬워집니다.