C
Python/중급/Lesson 15

try-except — Python 예외 처리

15분·theory
이 챕터
7/8

try-except — Python 예외 처리

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ try-except-else-finally 4박자
  • ✅ 구체적 예외 클래스 catch + broad except 회피
  • ✅ raise ... from ... 으로 원인 체이닝

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

try-except 6가지 패턴 — 코드 + 실행 결과

try-except = 에러 발생 시 프로그램 멈추지 않게 처리. 실무 코드의 안전망.


1. 가장 단순한 형태

python
나이_문자 = "스물여덟"

try:
    나이 = int(나이_문자)              # ❌ 에러 발생
    print(나이)
except:
    print("숫자로 바꿀 수 없어요!")

# 출력: 숫자로 바꿀 수 없어요!
# 프로그램은 죽지 않고 다음으로 진행

⚠️ except: 만 쓰면 모든 에러 잡음 — 디버깅 어려워짐. 구체 타입 권장.


2. 구체 에러 타입 잡기

python
try:
    나이 = int(input("나이? "))
    print(100 / 나이)
except ValueError:                 # int 변환 실패
    print("숫자만 입력하세요")
except ZeroDivisionError:           # 0으로 나누기
    print("0 은 안 됩니다")
except Exception as e:              # 그 외 모든 에러
    print(f"예상치 못한 에러: {e}")

except ValueError:ValueError 만 잡음. 다른 에러는 통과.


3. else · finally

python
try:
    파일 = open("data.txt")
    내용 = 파일.read()
except FileNotFoundError:
    print("파일 없음")
else:
    # try 가 성공한 경우만
    print(f"읽은 글자 수: {len(내용)}")
finally:
    # 성공·실패 무관 *항상* 실행
    print("정리 작업")
    파일.close() if "파일" in dir() else None

finally = "끝마무리" 코드 — 파일·DB 연결 종료 등.


4. raise — 직접 에러 발생

python
def 나이_등록(나이):
    if 나이 < 0:
        raise ValueError("나이는 음수일 수 없어요")
    if 나이 > 150:
        raise ValueError("150 살 넘는 사람 X")
    print(f"등록: {나이}살")

try:
    나이_등록(-5)
except ValueError as e:
    print(f"입력 오류: {e}")

# 출력: 입력 오류: 나이는 음수일 수 없어요

raise의도적으로 에러 발생 — 잘못된 입력 차단의 표준 방식.


5. 커스텀 예외 클래스

python
class 잔액부족(Exception):
    """은행 출금 시 잔액 부족"""
    pass

def 출금(잔액, 요청):
    if 요청 > 잔액:
        raise 잔액부족(f"잔액 {잔액} < 요청 {요청}")
    return 잔액 - 요청

try:
    new_잔액 = 출금(1000, 5000)
except 잔액부족 as e:
    print(f"⚠️ {e}")

# 출력: ⚠️ 잔액 1000 < 요청 5000

6. 자주 쓰는 에러 종류

python
"abc"[10]              # IndexError
{}["없는키"]            # KeyError
int("abc")             # ValueError
1 / 0                  # ZeroDivisionError
open("없는파일")        # FileNotFoundError
[1,2] + 3              # TypeError
없는_변수              # NameError

에러 메시지에 어떤 종류 인지 항상 첫 줄에 표시 — 그 이름으로 except.


한 줄 요약

키워드역할
try시도할 코드
except에러 잡기 (구체 타입 권장)
elsetry 성공 시만
finally항상 (정리)
raise직접 에러 발생

핵심: 사용자 입력·파일·네트워크 같은 불확실한 곳은 try 로 감싼다.

🐍 실행해보기 — try-except — 직접 실행

위 개념을 실제로 코드로 실행해보세요. 값을 바꿔가며 어떻게 동작하는지 직접 확인하는 게 가장 빠른 학습.
✏️ Python 코드
📟 콘솔 출력
▶ 실행 버튼을 눌러보세요
🐍 Pyodide로 실제 Python 실행 — 첫 실행 시 로딩 3~5초 소요

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 broad except 를 구체 예외 클래스로 좁혀줘"
  • "이 except 에 logging.exception 사용해 stack 포함 로그 남기게 해줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

try-except — Python 예외 처리 - Python