[파이썬 입문 10편] 예외 처리 – try와 except로 오류에 강한 코드 만들기
파이썬으로 프로그램을 만들다 보면, 사용자가 엉뚱한 입력을 하거나, 파일이 없는 경로를 찾는 실수를 하기도 해요.
예를 들어, “숫자”를 입력하라고 했는데 “열다섯”이라고 입력하면 어떻게 될까요? 프로그램이 바로 멈춰버려요. 😢
이렇게 예상치 못한 상황에서도 프로그램이 멈추지 않고, 친절하게 안내하도록 만드는 기능이 바로 try
와 except
입니다.
이번 편에서는 예외 처리의 개념부터 자주 쓰는 패턴, 그리고 초보자도 자주 마주칠 수 있는 상황을 예제로 다뤄볼게요.
✅ try-except 기본 구조
try:
실행할 코드
except 예외종류:
예외 발생 시 실행할 코드
무슨 뜻이냐면요?
실제로 문제가 생기면
예외가 없으면
try
안에는 문제가 생길 수도 있는 코드를 넣고,실제로 문제가 생기면
except
아래의 코드가 실행돼요.예외가 없으면
except
는 그냥 지나가고요.
▶️ 예제 1 – 0으로 나누기 에러 처리
try:
num = int(input("숫자를 입력하세요: "))
print(10 / num)
except ZeroDivisionError:
print("0으로 나눌 수 없습니다!")
숫자를 0으로 입력하면:
0으로 나눌 수 없습니다!
0으로 나눌 수 없습니다!
코드 흐름 설명:
- 사용자가 입력한 값을 정수로 바꿔서 num에 저장합니다.
- 10을 입력한 숫자로 나눠서 출력합니다.
- 그런데 0을 입력하면,
ZeroDivisionError
예외가 발생해요. - 그래서
except
아래 문장이 실행되며 에러를 안내합니다.
🧠 생활 비유:
계산기에서 “10 ÷ 0” 누르면 에러 나듯,
계산기에서 “10 ÷ 0” 누르면 에러 나듯,
except
는 이런 상황을 미리 알고 “안전벨트”처럼 보호해주는 역할을 해요.
▶️ 예제 2 – 숫자가 아닌 문자를 입력했을 때
try:
age = int(input("나이를 입력하세요: "))
print(f"당신은 {age}살입니다.")
except ValueError:
print("숫자를 입력해야 해요!")
“열다섯” 입력 시 → 숫자를 입력해야 해요!
왜 ValueError가 뜰까요?
- int()는 문자열을 숫자로 바꾸려는 함수입니다.
- 문자 “열다섯”은 숫자가 아니기 때문에 에러가 발생해요.
- 그럴 땐
except ValueError:
로 처리해서 안내할 수 있어요.
✅ 여러 예외 한 번에 처리하기
try:
num = int(input("숫자 입력: "))
print(10 / num)
except (ValueError, ZeroDivisionError):
print("잘못된 입력입니다!")
이렇게 괄호로 묶으면 여러 개의 예외를 한 번에 처리할 수 있어요.
입력값이 잘못되었거나 0으로 나눴을 때 같은 상황을 깔끔하게 처리할 수 있죠.
입력값이 잘못되었거나 0으로 나눴을 때 같은 상황을 깔끔하게 처리할 수 있죠.
✅ finally – 무조건 실행되는 블록
try:
print("나누기 시작")
print(10 / 0)
except:
print("에러 발생")
finally:
print("프로그램 종료")
나누기 시작
에러 발생
프로그램 종료
에러 발생
프로그램 종료
finally
블록은 예외가 생기든 말든 무조건 실행돼요.프로그램 종료 안내, 파일 닫기 같은 “마무리 작업”에 많이 써요.
▶️ 예제 3 – 함수 안에서 안전하게 입력 처리
def 안전한_입력():
try:
number = int(input("숫자를 입력하세요: "))
return number
except ValueError:
print("잘못된 입력입니다. 기본값 0을 반환합니다.")
return 0
num = 안전한_입력()
print("입력받은 숫자:", num)
문자 입력 시 → 잘못된 입력입니다. 기본값 0을 반환합니다.
입력받은 숫자: 0
입력받은 숫자: 0
예외 처리는 함수 안에서도 쓸 수 있어요!
위 코드처럼 사용자 입력을 받을 때 실수가 생겨도, 프로그램이 멈추지 않고 기본값을 줄 수 있어요.
위 코드처럼 사용자 입력을 받을 때 실수가 생겨도, 프로그램이 멈추지 않고 기본값을 줄 수 있어요.
✅ 핵심 정리
try
: 문제가 생길 수 있는 코드를 감쌈except
: 예외가 발생했을 때의 대처 코드finally
: 에러 유무 관계없이 무조건 실행ValueError
,ZeroDivisionError
등 자주 쓰이는 예외명- 여러 예외를
(예외1, 예외2)
형태로 한꺼번에 처리 가능
마무리 팁: 초보자는 예외 메시지를 그대로 사용자에게 보여주지 말고,
쉽고 부드럽게 안내하는 문구를 넣는 것이 중요해요 😊