파이썬 예외 처리는 프로그램이 갑자기 멈추지 않도록 만드는 안전장치입니다. 초보자는 try와 except를 단순히 “에러를 숨기는 문법”으로 이해하기 쉽지만, 실무에서는 오류를 예상하고, 기록하고, 안전하게 복구하는 흐름을 설계하는 도구에 가깝습니다.
이 글의 목표: 파이썬 초보자가 try, except, else, finally, raise를 언제 쓰는지 이해하고, 파일 처리·API 호출·데이터 분석 코드에서 프로그램이 멈추지 않도록 만드는 기본 패턴을 익히는 것입니다.
핵심 요약
- 예외(Exception)는 실행 중 발생하는 오류이고, 문법 오류(SyntaxError)와는 다릅니다.
try에는 실패할 수 있는 코드를,except에는 실패했을 때의 대응 코드를 둡니다.except Exception처럼 너무 넓게 잡기보다 예상 가능한 예외 타입을 구체적으로 잡는 것이 좋습니다.else는 예외가 없을 때 실행되고,finally는 성공/실패와 관계없이 정리 작업에 사용됩니다.- FLOWIT 자동화 코드에서는 예외를 숨기기보다 로그로 남기고, 재시도 여부를 판단하고, 사람이 확인할 수 있게 만드는 것이 중요합니다.
목차
- 예외 처리는 무엇인가
- try-except 기본 구조
- else와 finally를 쓰는 경우
- raise와 사용자 정의 예외
- 실무에서 자주 쓰는 예외 처리 패턴
- 초보자가 피해야 할 패턴
- FLOWIT 자동화 관점
- 자주 묻는 질문
- 참고 자료
예외 처리는 무엇인가
파이썬 공식 튜토리얼은 오류를 크게 문법 오류와 예외로 나누어 설명합니다. 문법 오류는 코드 자체가 파이썬 문법에 맞지 않아 실행 전부터 막히는 경우입니다. 반면 예외는 문법은 맞지만 실행 중 특정 상황에서 실패하는 오류입니다.
예를 들어 숫자를 0으로 나누면 ZeroDivisionError가 발생하고, 존재하지 않는 파일을 열면 FileNotFoundError가 발생합니다. 이런 상황을 예상하고 대응하는 것이 예외 처리입니다.
try-except 기본 구조
가장 기본 구조는 아래와 같습니다.
try:
number = int(input("숫자를 입력하세요: "))
print(10 / number)
except ValueError:
print("숫자로 변환할 수 없는 값입니다.")
except ZeroDivisionError:
print("0으로는 나눌 수 없습니다.")
try 블록에는 실패할 수 있는 코드를 넣습니다. except 블록에는 특정 예외가 발생했을 때 실행할 코드를 넣습니다. 중요한 점은 예외를 무조건 하나로 뭉뚱그려 처리하지 않는 것입니다. 입력값 문제인지, 0으로 나눈 문제인지에 따라 사용자에게 보여줄 메시지도 달라져야 합니다.
else와 finally를 쓰는 경우
try-except만으로도 대부분의 예외 처리는 가능하지만, 코드 흐름을 더 명확히 하려면 else와 finally도 알아두는 것이 좋습니다.
| 구문 | 실행 시점 | 주요 용도 |
|---|---|---|
try |
먼저 실행 | 실패할 수 있는 코드 |
except |
예외 발생 시 | 오류 대응, 메시지, 대체 흐름 |
else |
예외가 없을 때 | 성공했을 때만 실행할 후속 처리 |
finally |
성공/실패 관계없이 | 파일 닫기, 연결 해제, 정리 작업 |
try:
f = open("data.txt", "r", encoding="utf-8")
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
else:
text = f.read()
print(text[:100])
finally:
print("파일 처리 시도를 마쳤습니다.")
실무에서는 파일, 네트워크, 데이터베이스처럼 외부 자원과 연결되는 코드에서 finally의 의미가 커집니다. 다만 파일 처리에서는 with open(...)을 쓰면 파일 닫기를 더 안전하게 처리할 수 있습니다.
raise와 사용자 정의 예외
예외 처리는 이미 발생한 오류를 잡는 데만 쓰지 않습니다. 코드가 더 이상 진행되면 위험한 상황에서 직접 예외를 발생시킬 수도 있습니다.
def withdraw(balance, amount):
if amount > balance:
raise ValueError("잔액보다 큰 금액은 출금할 수 없습니다.")
return balance - amount
raise는 “이 상태는 정상 흐름이 아니다”라고 명확히 표시할 때 사용합니다. 사용자 정의 예외를 만들 수도 있지만, 초보 단계에서는 먼저 파이썬에 내장된 예외 타입을 적절히 쓰는 것부터 익히는 편이 좋습니다.
실무에서 자주 쓰는 예외 처리 패턴
실무에서 예외 처리는 사용자를 위한 메시지, 운영자를 위한 로그, 시스템을 위한 복구 흐름을 함께 고려합니다.
- 입력값 검증: 사용자가 숫자 대신 문자를 입력했을 때 친절한 메시지를 보여줍니다.
- 파일 처리: 파일이 없을 때 기본 파일을 만들거나 안내 메시지를 출력합니다.
- API 호출: 요청 실패 시 재시도하거나, 실패 로그를 남기고 다음 작업으로 넘어갑니다.
- 데이터 분석: 누락된 컬럼이나 잘못된 타입을 발견했을 때 즉시 원인을 알려줍니다.
import logging
try:
result = 10 / 0
except ZeroDivisionError as e:
logging.exception("계산 중 오류가 발생했습니다: %s", e)
print는 학습 단계에서는 충분하지만, 운영 코드에서는 로그를 남기는 방식이 더 좋습니다. 그래야 자동화가 실패했을 때 언제, 어떤 입력으로, 어떤 오류가 났는지 추적할 수 있습니다.
초보자가 피해야 할 패턴
예외 처리는 강력하지만 잘못 쓰면 오히려 문제를 숨깁니다.
- 아무것도 하지 않는 except: 오류를 숨기기 때문에 나중에 더 큰 문제가 됩니다.
- 모든 예외를 무조건 Exception으로 처리: 실제 원인을 구분하기 어렵습니다.
- 사용자에게 기술적인 오류를 그대로 노출: 초보 사용자에게는 이해하기 어렵고 불안감을 줍니다.
- 복구할 수 없는 오류까지 계속 진행: 데이터 손상이나 잘못된 결과로 이어질 수 있습니다.
# 피하는 것이 좋은 예
try:
run_automation()
except Exception:
pass
좋은 기준: 예외를 잡았다면 최소한 로그를 남기거나, 사용자에게 안전한 메시지를 보여주거나, 다음 행동을 명확히 결정해야 합니다.
FLOWIT 자동화 관점
FLOWIT처럼 WordPress, YouTube Shorts, 데이터 분석, AI 에이전트 자동화를 다루는 시스템에서는 예외 처리가 특히 중요합니다. 자동화는 한 번 실패하면 조용히 멈추거나, 반대로 잘못된 결과를 계속 만들어낼 수 있기 때문입니다.
FLOWIT 기준의 예외 처리 원칙은 단순합니다.
- 실패 가능성이 높은 외부 API, 파일, 네트워크 작업은 반드시 예외 처리합니다.
- 실패 원인을 사람이 확인할 수 있도록 로그를 남깁니다.
- 자동 재시도는 횟수를 제한합니다.
- 공개 발행, 삭제, 업로드 같은 작업은 실패 시 멈추고 검토 요청을 보냅니다.
- 조용히 넘어가는 코드보다, 안전하게 실패하는 코드가 더 좋습니다.
자주 묻는 질문
try-except를 많이 쓰면 좋은 코드인가요?
많이 쓰는 것보다 필요한 위치에 정확히 쓰는 것이 중요합니다. 실패할 수 있는 외부 입력, 파일, 네트워크, API 작업에 우선 적용하세요.
except Exception은 쓰면 안 되나요?
무조건 금지는 아니지만, 초보 단계에서는 구체적인 예외 타입을 먼저 잡는 습관이 좋습니다. 모든 예외를 넓게 잡으면 실제 버그를 놓칠 수 있습니다.
finally는 꼭 써야 하나요?
항상 필요하지는 않습니다. 하지만 파일 닫기, 연결 해제, 임시 상태 정리처럼 성공/실패와 관계없이 실행해야 하는 작업이 있다면 유용합니다.
예외 메시지는 사용자에게 그대로 보여줘도 되나요?
개발 중에는 괜찮지만, 실제 사용자에게는 쉬운 문장으로 바꿔 보여주는 편이 좋습니다. 자세한 원인은 로그에 남기고, 화면에는 안전한 안내를 제공하세요.
Python 기초 학습 로드맵
이 글은 FLOWIT Python 기초 글 묶음 중 하나입니다. 전체 흐름은 허브 글에서 먼저 잡고, 이후 자료구조·모듈·예외 처리·객체지향·Pandas 분석 순서로 이어서 학습해보세요.
- 허브: Python 입문 로드맵 — 설치부터 데이터 분석 자동화까지 전체 흐름 보기
- 다음 학습: 파이썬 시작하기 — 입문 환경 구축
- 다음 학습: 파이썬 자료구조 4가지 — 리스트·튜플·딕셔너리·집합
- 다음 학습: 파이썬 모듈과 패키지 — import·가상환경
- 현재 글: 파이썬 예외 처리 — try/except·안전한 자동화
- 다음 학습: 파이썬 객체지향 프로그래밍 — 클래스·객체·설계
- 다음 학습: Pandas 입문 — 데이터 분석 첫걸음
- 다음 학습: Pandas 데이터 전처리 — 실무 데이터 정리
- 다음 학습: 파이썬 주식 데이터 분석 — 시각화·기술지표 실습
참고 자료
이 글이 마음에 드세요?
FLOWIT on YouTube
영상으로도 FLOWIT을 이어서 보세요
AI 자동화, Claude Code, n8n, 데이터 분석 흐름을 블로그와 영상으로 함께 정리하고 있습니다.
AI에게 CSV를 맡기기 전: 데이터 계약으로 엑셀·분석 자동화 오류를 막는 법
Python 입문 로드맵: 설치부터 데이터 분석 자동화까지 한 번에 정리
데이터 누락을 극복하는 IT 트렌드 분석과 정보 수집 가이드