Day 17

예외 처리: 에러가 나도 당황하지 않는 법

프로그램의 멈춤을 방지하는 든든한 보호막, try-except

안녕하세요! 16일차에서 파일을 읽어오는 법을 배웠죠? 그런데 만약 읽으려는 파일이 없다면 어떻게 될까요? 파이썬은 즉시 빨간색 에러 메시지를 띄우며 작동을 멈춰버립니다. 하지만 예외 처리를 배우면 에러 상황을 우아하게 넘길 수 있습니다.

함께 코딩하는 젊은 개발자들

1. try-except: "일단 해보고, 안되면 대처해!"

가장 기본적인 안전장치 구조입니다. try 블록에는 원래 하려던 코드를, except에는 에러가 났을 때 할 행동을 적습니다.

실행 (try)
➡️
에러 발생 시
대처 (except)
➡️
계속 실행
try:
    num = int(input("숫자를 입력하세요: "))
    print(f"입력하신 숫자는 {num}입니다.")
except ValueError:
    print("⚠️ 오류: 숫자가 아닌 글자가 입력되었습니다!")

print("프로그램이 종료되지 않고 계속 실행됩니다.")

2. 에러의 종류에 따라 다르게 대처하기

파이썬에는 다양한 에러(Exception)가 있습니다. 어떤 에러가 났느냐에 따라 다른 안내 메시지를 줄 수 있습니다.

try:
    a = [10, 20, 30]
    index = int(input("인덱스 번호를 입력하세요: "))
    print(a[index] / 0) # 인덱스 에러와 0으로 나누기 에러 가능성!
except IndexError:
    print("목록에 없는 번호입니다.")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
except Exception as e:
    print(f"예상치 못한 에러가 발생했습니다: {e}")

3. 뒷정리까지 깔끔하게: finally

에러가 나든 안 나든 무조건 실행해야 하는 코드가 있다면 finally를 사용합니다. 주로 열려 있는 파일을 닫을 때 사용하죠.

try:
    f = open("data.txt", "r")
    # 파일 작업 수행
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
finally:
    print("작업을 마무리하고 정리 중입니다.")
    # f.close() 같은 코드 배치
💡 팁: 에러 메시지를 변수로 받기
except ValueError as e: 처럼 작성하면 파이썬이 기본으로 제공하는 에러 원인 메시지(e)를 직접 출력할 수 있어 디버깅에 큰 도움이 됩니다.

💡 예외 처리 Q&A

Q1. 모든 에러를 except Exception: 하나로 처리하면 안 되나요?

A. 편해 보이지만 권장하지 않습니다. 어떤 종류의 에러가 났는지 정확히 알아야 코드를 수정하기 쉽기 때문입니다. 가급적 구체적인 에러 이름을 적어주는 것이 좋습니다.

Q2. pass를 써서 에러를 무시해도 될까요?

A. except: pass라고 쓰면 에러가 나도 아무 일 없다는 듯 넘어갑니다. 하지만 프로그램이 왜 이상하게 작동하는지 원인을 찾기 힘들어지므로 정말 필요한 경우가 아니면 피해야 합니다.

Q3. 의도적으로 에러를 낼 수도 있나요?

A. 네! raise 키워드를 사용합니다. 예를 들어 "나이는 음수가 될 수 없다"는 비즈니스 규칙을 어겼을 때 억지로 에러를 발생시켜 흐름을 제어할 수 있습니다.

Q4. else 블록은 언제 쓰나요?

A. try 블록에서 에러가 **전혀 발생하지 않았을 때만** 실행하고 싶은 코드가 있다면 else: 블록에 넣습니다. 성공적인 실행을 확인하는 용도로 쓰입니다.

오늘의 미션 🚩

"안전한 나눗셈 계산기"
1. 사용자로부터 두 개의 숫자를 입력받으세요.
2. 첫 번째 숫자를 두 번째 숫자로 나눈 결과를 출력하세요.
3. 0으로 나눌 때(ZeroDivisionError)글자를 입력할 때(ValueError)를 각각 예외 처리하여 프로그램이 꺼지지 않게 만드세요!

이제 어떤 에러 폭풍이 불어도 견딜 수 있는 튼튼한 코드를 짜실 수 있습니다!
내일은 파이썬의 능력을 무한대로 확장해주는 18일차: 모듈과 패키지로 돌아올게요. 💜

댓글

이 블로그의 인기 게시물

초보 파이썬 따라하기: 7가지 실전 프로젝트로 매일 코딩 습관 만들기

조건문(if, elif, else) 배우기

초보자를 위한 Step-by-Step: 리스트와 인덱싱으로 값을 추가/삭제해 Python 기초 잡기