| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 인덱싱슬라이싱
- 연산자연습문제
- break와continue
- 미국에서 밴쿠버가기
- 코딩연습문제
- 내일부터출근
- 거미줄의비밀
- 리스트수정삭제
- 코딩교과서
- sum함수원리
- 미국 Amtrax
- 파이썬합계구하기
- 파이썬독학
- Amtrax후기
- 코딩독학
- 한외마약
- 지역변수전역변수
- 홀짝판별
- 캐나다 Amtrax
- 코포나시럽
- 데이터누적
- 초코만두
- 생물학습
- 파이썬기초
- Amtrax
- 코딩입문
- 탄수화물소화
- 튜플언패킹
- 자료형정리
- 벌루닝
- Today
- Total
SP'S SPARKING
[Python 기초] 예외 처리: 에러 앞에서도 멈추지 않는 프로그램 본문
이번 시간에는 프로그램의 완성도를 결정짓는 '예외 처리(Exception Handling)'에 대해 알아보자. 코드를 아무리 잘 짜더라도 사용자의 실수나 예상치 못한 상황으로 인해 에러는 발생하기 마련이다.
이전에 배웠던 조건문(if-else)이 논리적인 흐름을 제어했다면, 예외 처리는 프로그램이 갑작스럽게 멈추는 '비정상 종료'를 막고 안전하게 끝까지 실행되도록 돕는 안전장치와 같다.
1. 예외 처리의 정의와 기본 구조
프로그램 실행 중 발생하는 에러를 '예외(Exception)'라고 한다. 예외 처리는 이 에러를 미리 예상하여 별도의 길로 안내하는 과정이다. 파이썬에서는 try-except 문을 사용하며, 예외가 발생할 가능성이 있는 코드를 감싸 보호한다.
try:
# 예외가 발생할 수 있는 코드
except 예외타입:
# 예외가 발생했을 때 실행할 코드
예제: 0으로 나누기 예외 처리
try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
코드 해석: 파이썬에서 숫자를 0으로 나누면 ZeroDivisionError가 발생한다. try 블록 안에서 에러가 발생하면 즉시 중단되고 except 블록으로 넘어가 준비된 메시지를 출력한다. 덕분에 프로그램은 강제 종료되지 않고 안전하게 유지된다. 핵심 키워드: ZeroDivisionError, try-except
2. 다양한 예외 타입 처리
사용자로부터 입력을 받을 때는 특히 예외 처리가 중요하다. 숫자를 입력해야 하는 곳에 문자를 넣는 등의 실수를 처리할 수 있다.
try:
user_input = input("숫자를 입력하세요: ")
number = int(user_input)
print(f"입력한 숫자는 {number}입니다.")
except ValueError:
print("유효한 숫자를 입력하세요.")
코드 해석: int() 함수는 문자열을 정수로 변환한다. 만약 사용자가 '안녕'과 같은 문자를 입력하면 ValueError가 발생한다. except ValueError 블록이 이를 가로채서 사용자에게 친절한 안내 문구를 보여준다. 핵심 키워드: ValueError, 형 변환(Casting)
3. else와 finally: 완벽한 마무리
예외 처리에는 에러가 발생하지 않았을 때만 실행되는 else, 그리고 에러 발생 여부와 상관없이 무조건 실행되는 finally 블록을 추가할 수 있다.
try:
number = int(input("숫자를 입력하세요: "))
except ValueError:
print("유효한 숫자를 입력하세요.")
else:
print(f"입력한 숫자는 {number}입니다.")
finally:
print("프로그램이 종료됩니다.")
코드 해석: > 1. try: 숫자 변환 시도 2. except: 에러 발생 시 안내 출력 3. else: 에러가 없을 때만 입력값 확인 메시지 출력 4. finally: 에러 여부와 무관하게 마지막 인사를 출력하며 마무리 핵심 키워드: else, finally
4. 모든 예외 처리와 Exception 클래스
발생할 에러의 종류를 정확히 모를 때는 모든 예외의 조상 격인 Exception 클래스를 사용한다. as e를 붙이면 구체적인 에러 메시지도 확인할 수 있다.
try:
# 예측하기 힘든 예외 상황 코드
result = 10 / "a"
except Exception as e:
print(f"예외가 발생했습니다: {e}")
코드 해석: 문자열로 나눗셈을 시도하면 TypeError가 발생한다. 특정하지 않은 에러라도 Exception이 모두 받아내어 어떤 에러인지 알려준다. 다만, 공부할 때는 가급적 에러 타입을 정확히 지정하는 습관을 들이는 것이 좋다. 핵심 키워드: Exception 클래스, 예외 객체(e)
실전 종합 예제: 1인당 금액 계산기
여러 개의 except 블록을 사용하여 다양한 상황(문자 입력, 0 입력 등)을 한꺼번에 관리하는 실전 코드이다.
try :
a = int(input("인원 입력: "))
b = int(input("금액 입력: "))
c = b / a
except ValueError:
print("숫자를 입력하세요.")
except ZeroDivisionError:
print("인원은 0보다 커야 합니다.")
except Exception as e:
print(f"예상치 못한 예외 발생: {e}")
else:
print(f"1인당 금액: {c}")
finally:
print("이용해 주셔서 감사합니다.")
[실행 결과 예시]
- 정상 입력 (3명, 15000원): "1인당 금액: 5000.0" 출력 후 "이용해 주셔서 감사합니다."
- 잘못된 입력 (여섯 명 입력): "숫자를 입력하세요." 출력 후 "이용해 주셔서 감사합니다."
- 0 입력 (0명 입력): "인원은 0보다 커야 합니다." 출력 후 "이용해 주셔서 감사합니다."
코드 해석: 앞서 배운 연산자와 입출력, 예외 처리가 모두 집약된 구조이다. 각기 다른 에러에 대응하는 except 문들이 프로그램의 방어막 역할을 한다.
5. raise: 예외를 강제로 발생시키기
방어적으로 에러를 막는 것을 넘어, 프로그래머가 특정 조건에서 의도적으로 에러를 일으켜야 할 때가 있다. 이때 raise 명령어를 사용한다.
def set_age(age):
if age < 0:
raise ValueError("나이는 0 이상이어야 합니다.")
print(f"나이는 {age}입니다.")
try:
set_age(-3)
except ValueError as e:
print(f"예외가 발생했습니다: {e}")
코드 해석: set_age 함수는 나이가 음수일 때 raise를 통해 ValueError를 강제로 발생시킨다. 호출하는 쪽에서는 이를 try-except로 받아내어 "나이는 0 이상이어야 합니다."라는 사용자 정의 메시지를 출력할 수 있다. 이는 잘못된 데이터가 프로그램 깊숙이 전달되는 것을 입구에서 차단하는 역할을 한다.
마치며
예외 처리는 사용자와 프로그램 사이의 '친절한 대화'와 같다. 에러가 났을 때 검은 화면에 깨진 글자가 나오는 대신, 우리가 준비한 안내 문구를 보여줌으로써 프로그램의 신뢰도를 높일 수 있다.
'HAPPYHACKING' 카테고리의 다른 글
| [Python 기초] 클래스와 객체: 나만의 설계도 만들기 __init__ 과 self (0) | 2026.03.16 |
|---|---|
| [Python 기초] 함수(Function): 효율적인 코드의 재사용 (0) | 2026.03.16 |
| [Python 기초] while 반복문과 제어문: 조건에 따른 자유로운 반복 (0) | 2026.03.16 |
| [Python 기초] 반복문(For Loop): 효율적인 자동화의 시작 (0) | 2026.03.16 |
| [Python 기초] 딕셔너리(Dictionary): 키와 값의 쌍으로 데이터 관리하기 (0) | 2026.03.15 |