든든한 안전망: try-except 예외 처리

프로그램 실행 중 발생하는 에러(예외)를 우아하게 대비/처리하여, 프로그램이 의도치 않게 갑자기 강제 침몰하는 것을 막아내는 튼튼한 방어 로직을 배웁니다.

비정상 종류

일반적으로 파이썬 프로그램은 예기치 못한 에러(ZeroDivisionError, IndexError 등)가 발생하면 그 즉시 비정상 종료(Crash)됩니다. 하지만 우리가 이용하는 웹 서버나 24시간 도는 봇 프로그램이 사소한 입력값 하나 잘못 받았다고 완전히 꺼져버린다면 매우 곤란할 것입니다.

예외 처리 동작 웹툰 (웹툰 비유: 코드를 실행하며 조심조심 유리그릇을 옮기던 로봇이 돌부리(Exception)에 걸려 넘어집니다. 하지만 바닥에 부딪혀 와장창 깨지기 직전, 마법처럼 except라고 쓰인 푹신한 안전 그물망이 튀어나와 로봇을 안전하게 받아냅니다.)

안정망

이때 안전망 역할을 해주는 필수 방어적 코딩 기법이 바로 try-except 예외 처리 구문입니다.

예외 처리 동작 원리: 에러가 발생하면 비상망으로 떨어지고, 무조건 최종 블록을 거쳐가는 애니메이션 (다이어그램: 초록색 정상 점은 try 블록을 무사히 거쳐 finally 출구로 기분 좋게 빠져나갑니다. 반면, 빨간색 에러 점은 try 블록 중간에 번개(에러)를 맞고 비상망(except)으로 튕겨져 떨어져 복구 프로세스를 거친 후, 똑같이 노란색 finally 출구로 빠져나가는 두 갈래의 흐름을 묘사한 애니메이션입니다.)

기본 구조: try-except

“일단 블록 안의 코드를 시도해봐(try). 만약 에러가 터지면(except) 이렇게 조치해.”

try:
    # 에러가 발생할 가능성이 있는 논리 코드
    number = 10 / 0
except ZeroDivisionError:
    # 에러가 감지되었을 때 비상탈출하여 실행할 복구 코드
    print("0으로 나눌 수 없습니다! (프로그램은 계속 실행됩니다)")

[실행 결과]

0으로 나눌 수 없습니다! (프로그램은 계속 실행됩니다)

(붉은색의 시스템 에러 메시지를 뿜지 않고, 우리가 핸들링한 문구가 출력되며 프로그램은 비정상 종료 없이 매끄럽게 계속 실행됩니다.)

실전 예제 1: 입력값 변환 보호 (ValueError)

사용자가 숫자가 아닌 문자를 입력했을 때 int() 함수가 터지는 것을 막아냅니다.

user_input = "삼백원"
try:
    price = int(user_input)
    print(f"입력된 가격은 {price}입니다.")
except ValueError:
    print("❌ 숫자로 변환할 수 없는 입력입니다. 다시 확인해주세요.")

🎧 방어적 코딩 & Vibe Coding

🗣️ 학생 프롬프트 (AI에게 이렇게 명령해 보세요): “파이썬에서 사용자의 나이를 input()으로 입력받아 숫자로 변환하는 코드를 짜줘. 만약 사용자가 ‘스무살’처럼 텍스트를 입력해서 ValueError가 발생하더라도, 프로그램이 뻗지 않고(안전하게) try-except로 오류를 낚아채어 ‘숫자만 입력해 주세요!’라고 다시 물어보는 완성된 예제 코드를 만들어 줘. 주석도 꼼꼼히 작성해 줘.”


📝 코딩 영단어 정복

  • Try: 시도하다. (먼저 코드를 정상적으로 실행해 보겠다는 선언입니다.)
  • Except (또는 Catch): ~을 제외하고, 낚아채다. (시도하다가 실패한 상황을 안전망으로 받아낸다는 의미입니다.)
  • Crash: 충돌, 비정상 종료. (프로그램이 치명적인 오류를 만나 강제로 픽 하고 꺼져버리는 현상입니다.)
  • Handling: 다루기, 처리. (Error Handling은 발생하는 에러를 적절하게 통제하고 무마시키는 방어 조작을 뜻합니다.)
서브목차