파이썬 예외 처리의 핵심, try/except 완전 정복

Thank you for reading this post, don't forget to subscribe!

파이썬 하루 하나씩 배우기: 예외 처리의 시작, try/except

코드 짜다 멈춰 본 적 있으신가요? 특히 파일을 다루거나 사용자 입력을 받을 땐, 예외 상황이 일상입니다.
오늘은 그 상황을 우아하게 넘기는 방법, try/except를 알려드립니다.

이 글은 파이썬의 예외 처리 기법인 try/except을 완전히 이해하고, 실전에 적용하기 위한 가이드입니다.
초보자도 쉽게 따라올 수 있도록 구성되어 있으니, 한 걸음씩 함께 걸어봅시다.


예외란 무엇인가?

파이썬에서 ‘예외(Exception)’란, 프로그램이 실행되는 도중에 발생하는 의도치 않은 오류 상황을 말합니다. 예를 들어, 0으로 나누거나, 존재하지 않는 파일을 열려고 시도할 때 이런 예외가 발생합니다.

파이썬은 예외가 발생하면 기본적으로 프로그램을 종료시킵니다. 하지만 우리가 직접 이 예외를 감지하고 처리할 수 있다면? 오류는 더 이상 무서운 존재가 아니라, 사용자 경험을 지키는 안전 장치가 됩니다.


# 예외 발생 예시
print(10 / 0)  # ZeroDivisionError

✔ 핵심은 이것!

예외는 피하는 것이 아니라, ‘예측하고’ 다루는 것이다.


try/except의 기본 구조

예외 처리는 try 블록 안에서 코드 실행을 시도하고, except 블록에서 오류를 처리하는 방식으로 작동합니다. 아래는 기본적인 구조입니다.

구성 요소설명
try실행을 시도하는 코드 블록
except예외가 발생했을 때 처리할 코드
else예외 없이 try 블록이 성공적으로 실행된 경우
finally예외 발생 여부와 관계없이 무조건 실행

try:
    result = 10 / 0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

“실패는 예정된 이벤트다. 그걸 예측하지 못하면, 그건 선택이 아니라 방심이다.”


특정 예외 처리하기

파이썬에서는 다양한 예외 종류가 있으며, 이를 정확히 명시하여 처리할 수 있습니다. 다음은 자주 사용하는 예외들의 예시입니다.

  • ZeroDivisionError: 0으로 나눌 때
  • ValueError: 타입은 맞지만 부적절한 값일 때 (예: int(‘문자열’))
  • FileNotFoundError: 없는 파일을 열 때

예외를 정확히 지정해서 처리하면, 프로그램은 더 스마트해집니다. 실패를 ‘예상한 실패’로 바꾸는 게 진짜 개발이죠.


else와 finally의 활용

try/except는 단순히 예외를 처리하는 데 그치지 않습니다. elsefinally를 활용하면 더 정교하고 예측 가능한 흐름 제어가 가능합니다.

else 블록은 예외가 발생하지 않았을 때 실행되며, finally는 예외 발생 여부와 관계없이 항상 실행됩니다. 특히 리소스를 반환하거나 정리 작업을 할 때 finally는 필수입니다.

블록의미실행 조건
elsetry 블록이 성공적으로 실행된 경우예외 없음
finally항상 실행되는 마무리 코드항상

try:
    print("10 / 2 =", 10 / 2)
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
else:
    print("예외가 발생하지 않았습니다.")
finally:
    print("모든 작업이 종료되었습니다.")

“마무리를 망치면, 과정이 아무리 좋아도 실패처럼 느껴진다. finally는 그걸 막는 마지막 끈이다.”

예외 처리의 모범 사례

예외 처리는 단순히 try/except를 쓰는 게 아니라 언제, 왜, 어떻게 처리할 것인가에 대한 전략입니다. 다음은 실무에서 많이 사용되는 예외 처리 베스트 프랙티스입니다.

Best Practice설명
최소 범위로 예외 처리전체 함수가 아닌 문제 발생 가능성이 있는 부분만 try 처리
구체적인 예외 지정except 뒤에는 항상 예상 가능한 예외만 지정
에러 로그 출력traceback을 기록하거나 사용자에게 메시지 전달
finally로 리소스 정리파일, DB 연결 등을 안전하게 정리

“코드는 언젠가 실패한다. 문제는 언제 실패하느냐가 아니라, 그걸 어떻게 맞이하느냐에 있다.”

자주 발생하는 실수와 그 해결법

아래는 초보자들이 자주 저지르는 예외 처리 실수와 그에 대한 해결책입니다. 알고만 있어도 에러 디버깅 시간이 확 줄어듭니다.

  • 모든 예외를 except 하나로 처리 → 반드시 예외명을 명시하세요.
  • 예외 발생 원인을 무시한 채 pass 처리 → 로깅이나 메시지 출력은 꼭 남겨야 합니다.
  • try 블록 범위를 너무 크게 설정 → 실제 문제가 아닌 곳에서도 except가 작동하게 됩니다.

“예외를 무시하는 건, 현실을 외면하는 거랑 똑같아. 결국 돌아와서 발목 잡아.”


실전 후기: 예외 처리는 실수의 기록에서 시작된다

“코드는 돌아갔는데, 파일이 사라졌다. 로그를 뒤져봤더니, 예외가 발생했지만 아무 처리도 안 해놨더라고요. 그때 깨달았어요. 예외 처리는 사치가 아니라 생존이에요.”

처음엔 try/except이 귀찮게 느껴졌습니다. ‘그냥 오류 나면 터뜨리면 되지’라는 생각이었죠. 그런데 실제 서비스에 배포된 코드에서 단 한 줄의 except 누락이 수십 명의 사용자 데이터를 날려먹을 뻔한 사건이 있었어요. 다행히 백업이 있어서 복구는 했지만, 그날 이후로 제 코드엔 무조건 예외 처리가 들어갑니다.

✔ 핵심은 이것!

실수는 피할 수 없지만, 예외 처리는 그 실수를 기록하고 복구하는 유일한 무기입니다.


사용자 꿀팁: 예외 처리를 예쁘게 쓰는 3가지 방식

  • with 문과 함께 사용하기
    파일 입출력은 예외 처리와 세트로 씁니다. with open(...) 문을 쓰면 자동으로 리소스가 정리되어 finally 역할도 덜 수 있어요.
  • 로깅 라이브러리 사용
    print 대신 logging을 쓰면 나중에 로그 분석이 쉬워집니다. 특히 logger.exception()은 스택트레이스까지 남겨줘요.
  • 예외를 새로 만들어서 던지기
    상황에 맞는 사용자 정의 예외를 만들면 디버깅이 훨씬 수월합니다. 팀 단위 프로젝트에선 필수예요.

“코드는 당신을 배신하지 않는다. 당신이 스스로 무시한 조건만 배신할 뿐이다.”


try/except는 무조건 써야 하나요?
아니요. 모든 코드에 무조건 사용할 필요는 없지만, 사용자 입력, 파일 처리, 네트워크 등 예외가 자주 발생할 수 있는 부분엔 반드시 사용하는 게 좋습니다.

except를 여러 개 쓸 수 있나요?
네. 가능하고 권장됩니다. 다양한 예외를 각각 다르게 처리하면 디버깅과 유지보수에 훨씬 유리해집니다.

예외 메시지는 꼭 출력해야 하나요?
꼭은 아니지만, 출력하지 않으면 문제가 발생한 원인을 파악하기 어렵습니다. logging 모듈을 활용해 저장하는 것도 좋습니다.

finally는 언제 쓰는 게 좋을까요?
파일 닫기, 네트워크 연결 해제 등 자원을 무조건 정리해야 할 때 사용하세요. 예외 발생 여부와 관계없이 실행되므로 아주 유용합니다.

except에 아무 처리도 안 하면 안 되나요?
가능은 하지만 절대 추천하지 않습니다. pass로 무시하는 건 문제를 방치하는 겁니다. 최소한 로그라도 남겨두는 게 좋습니다.


시각 자료 및 참고 링크: 예외 처리의 시각적 이해

Python Try Except 예시

이미지 출처: Enterprise DNA Blog

파이썬 예외 처리 흐름도

이미지 출처: 취미생활 블로그

📚 참고 링크


마무리하며: 실패는 다뤄야 할 현실이다

파이썬을 배우면서 가장 많이 마주치는 것이 오류입니다. 이 글을 통해 예외 처리라는 도구가 단순히 오류 회피용이 아니라, 프로그램의 신뢰성과 사용자 경험을 지키는 보호망임을 느끼셨을 거예요.

실패를 두려워하지 마세요. 중요한 건 그 실패를 어떻게 다루느냐입니다. try/except는 실패를 안아주는 코드의 포옹이니까요. 내일은 이보다 더 강력한 ‘사용자 정의 예외 클래스’를 다뤄볼게요!

“예외는 에러가 아니다. 배려다.”

이 글의 만족도를 평가해주세요!

★★★★★


블로그 7단계 요약 다이어그램

※ 블로그 작성 7단계 흐름도 시각 요약


HANSORI.AI_Blog Labs에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.