파이썬 예외 처리의 기본 구조와 try, except, else, finally 사용법을 초보자 기준 예제로 정리합니다.
파이썬 예외 처리는 프로그램 실행 중 발생할 수 있는 오류를 안전하게 처리하는 방법입니다. 파일이 없거나, 숫자로 바꿀 수 없는 값이 들어오거나, 0으로 나누는 상황에서 프로그램이 바로 종료되지 않도록 도와줍니다.
코드를 작성하다 보면 오류는 피할 수 없습니다. 중요한 것은 오류가 났을 때 프로그램이 어떻게 반응하게 할지 정하는 것입니다.
오류와 예외는 무엇이 다를까
파이썬에서 오류는 크게 두 가지로 나눠볼 수 있습니다.
첫 번째는 문법 오류입니다.
print("안녕하세요"
괄호를 닫지 않았기 때문에 코드 자체가 실행되지 않습니다. 이런 오류는 실행 전에 고쳐야 합니다.
두 번째는 실행 중 발생하는 예외입니다.
number = int("abc")
문법은 맞지만 "abc"는 숫자로 바꿀 수 없습니다. 이 코드는 실행 중 ValueError가 발생합니다.
예외 처리는 주로 이런 실행 중 오류를 다룹니다.
예외 처리가 필요한 이유
사용자에게 숫자를 입력받는 코드를 생각해보겠습니다.
age = int(input("나이를 입력하세요: "))
print(age + 1)
사용자가 20을 입력하면 문제없이 동작합니다. 하지만 스무살이라고 입력하면 오류가 발생하고 프로그램이 종료됩니다.
이런 상황에서 예외 처리를 사용합니다.
try:
age = int(input("나이를 입력하세요: "))
print(age + 1)
except ValueError:
print("숫자로 입력해야 합니다.")
사용자가 숫자가 아닌 값을 입력해도 프로그램이 바로 종료되지 않고 안내 문구를 출력합니다.
try except 기본 구조
예외 처리의 기본 구조는 다음과 같습니다.
try:
예외가 발생할 수 있는 코드
except 예외종류:
예외가 발생했을 때 실행할 코드
예제를 보겠습니다.
try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
실행 결과는 다음과 같습니다.
0으로 나눌 수 없습니다.
10 / 0은 실행할 수 없는 계산입니다. 그래서 ZeroDivisionError가 발생합니다.
이때 except ZeroDivisionError 아래 코드가 실행됩니다.
여러 예외 처리하기
하나의 코드에서 여러 종류의 예외가 발생할 수 있습니다.
try:
number = int(input("숫자를 입력하세요: "))
result = 10 / number
print(result)
except ValueError:
print("숫자만 입력할 수 있습니다.")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
이 코드는 두 가지 예외를 처리합니다.
- 숫자로 바꿀 수 없는 값이 들어오면
ValueError - 0을 입력하면
ZeroDivisionError
예외 종류를 나눠 쓰면 사용자에게 더 정확한 안내를 할 수 있습니다.
모든 예외를 한 번에 처리할 수도 있다
아래처럼 예외 종류를 쓰지 않고 처리할 수도 있습니다.
try:
number = int(input("숫자를 입력하세요: "))
print(10 / number)
except:
print("오류가 발생했습니다.")
하지만 이 방식은 주의해야 합니다. 어떤 오류가 발생했는지 알기 어렵기 때문입니다.
초보 단계에서도 가능한 한 구체적인 예외 이름을 쓰는 습관이 좋습니다.
권장되는 방식은 다음과 같습니다.
try:
number = int(input("숫자를 입력하세요: "))
print(10 / number)
except ValueError:
print("숫자만 입력해주세요.")
except ZeroDivisionError:
print("0은 입력할 수 없습니다.")
예외 메시지 확인하기
예외가 발생했을 때 파이썬이 제공하는 메시지를 확인할 수도 있습니다.
try:
number = int("abc")
except ValueError as e:
print("오류 내용:", e)
이 방식은 오류 원인을 확인할 때 유용합니다.
else 사용하기
else는 예외가 발생하지 않았을 때 실행됩니다.
try:
number = int(input("숫자를 입력하세요: "))
except ValueError:
print("숫자로 입력해야 합니다.")
else:
print("입력한 숫자:", number)
예외가 발생하면 except가 실행됩니다. 예외가 발생하지 않으면 else가 실행됩니다.
성공했을 때 실행할 코드를 분리하고 싶다면 사용할 수 있습니다.
finally 사용하기
finally는 예외 발생 여부와 상관없이 항상 실행됩니다.
try:
file = open("sample.txt", "r", encoding="utf-8")
content = file.read()
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
finally:
print("작업을 종료합니다.")
파일을 찾든 찾지 못하든 finally 아래 코드는 실행됩니다.
실무에서는 파일 닫기, 연결 종료, 임시 작업 정리처럼 반드시 실행해야 하는 코드를 넣을 때 사용합니다.
다만 파일을 다룰 때는 보통 with 문을 더 자주 사용합니다. 파일 입출력 글에서 따로 다루는 것이 좋습니다.
raise로 예외 직접 발생시키기
필요한 경우 개발자가 직접 예외를 발생시킬 수도 있습니다.
def check_age(age):
if age < 0:
raise ValueError("나이는 음수가 될 수 없습니다.")
return age
print(check_age(20))
print(check_age(-1))
age가 음수라면 ValueError를 직접 발생시킵니다.
이 방식은 잘못된 값이 들어왔을 때 코드 흐름을 강제로 중단하고 싶을 때 사용합니다.
초보 단계에서는 “조건에 맞지 않는 값이 들어오면 예외를 직접 만들 수도 있다” 정도로 이해하면 충분합니다.
자주 발생하는 예외 종류
| 예외 이름 | 발생 상황 |
|---|---|
ValueError |
값의 형태가 맞지 않을 때 |
TypeError |
자료형이 맞지 않을 때 |
ZeroDivisionError |
0으로 나누려고 할 때 |
IndexError |
리스트 인덱스 범위를 벗어날 때 |
KeyError |
딕셔너리에 없는 키를 사용할 때 |
FileNotFoundError |
파일을 찾을 수 없을 때 |
예외 이름을 모두 외울 필요는 없습니다. 자주 만나는 오류부터 하나씩 익히면 됩니다.
예외 처리를 너무 넓게 쓰지 않기
예외 처리는 편리하지만, 모든 코드를 감싸는 방식으로 쓰면 좋지 않습니다.
try:
# 아주 많은 코드
pass
except Exception:
print("오류 발생")
이런 코드는 어디에서 문제가 생겼는지 찾기 어렵습니다.
예외 처리는 “오류가 발생할 가능성이 있는 부분”에만 좁게 적용하는 편이 좋습니다.
정리
파이썬 예외 처리는 실행 중 발생하는 오류를 안전하게 다루는 방법입니다.
기본 구조는 try와 except입니다. 예외가 발생할 수 있는 코드는 try에 넣고, 오류가 발생했을 때 실행할 코드는 except에 넣습니다.
가능하면 구체적인 예외 이름을 사용하고, 예외 처리 범위는 너무 넓게 잡지 않는 것이 좋습니다.
처음에는 ValueError, ZeroDivisionError, FileNotFoundError처럼 자주 만나는 예외부터 익히면 충분합니다.
'개발 > python' 카테고리의 다른 글
| 파이썬 모듈과 패키지: import로 코드를 나누고 재사용하는 방법 (0) | 2026.05.22 |
|---|---|
| 파이썬 파일 입출력: 텍스트 파일 읽고 쓰는 기본 방법 (0) | 2026.05.22 |
| 파이썬 함수: 반복되는 코드를 줄이고 재사용하는 방법 (0) | 2026.05.22 |
| 파이썬 반복문 for while 사용법 쉽게 이해하기 (0) | 2026.05.21 |
| 파이썬 조건문 if 사용법 쉽게 이해하기 (0) | 2026.05.21 |