개요
파이썬 코드는 실행(Runtime) 시점에 예기치 못한 상황을 만나면 예외를 발생시키고 프로세스를 중단한다. 이를 제어하고 프로그램의 연속성을 확보하기 위해 try-except 구문을 활용한 예외 처리가 필수적이다.
1. try-except문 구조
파이썬은 try와 except 키워드를 통해 예외 제어 흐름을 정의한다. 기본 구조는 다음과 같다.
try:
# 실행 대상 코드 (에러 발생 가능 영역)
except Exception:
# 예외 발생 시 실행되는 예외 핸들러
위 구조를 적용한 실제 구현 예시는 다음과 같다.
try:
# 사용자로부터 값을 입력받아 연산 수행
num = int(input("나눌 숫자를 입력하세요: "))
result = 10 / num
print(f"결과: {result}")
except Exception as e:
# 모든 종류의 예외 객체를 catch하여 출력
print(f"Error: {e}")
input함수 상세내용은 아래 참고 문단에서 확인한다.
2. 파이썬 주요 내장 예외 계층 구조
파이썬의 모든 예외는 클래스 상속 구조를 가진다. 최상위에 BaseException이 있고, 실무에서 다루는 대부분의 예외는 Exception 클래스를 부모로 상속받는다.
[Exception 계층도]
BaseException (최상위 부모)
└── Exception (모든 일반 예외의 부모 클래스)
├── ArithmeticError (산술 연산 관련 부모)
│ └── ZeroDivisionError (0으로 나누기)
├── LookupError (데이터 참조 관련 부모)
│ ├── IndexError (리스트 인덱스 범위 초과)
│ └── KeyError (딕셔너리 키 없음)
├── ValueError (부적절한 값 입력)
├── TypeError (잘못된 데이터 타입 사용)
├── FileNotFoundError (파일 경로 미존재)
└── RuntimeError (기타 시스템 실행 오류)
| 분류 | 예외 이름 | 발생 상황 및 조건 |
|---|---|---|
| 최상위 | Exception | 모든 일반 예외의 부모 클래스. 어떤 예외든 이 바구니에 담긴다. |
| 연산/값 | ZeroDivisionError | 숫자를 0으로 나누기 연산 시도 시 발생한다. |
| ValueError | 타입은 유효하나 부적절한 값을 가진 인자 전달 시 발생한다. | |
| TypeError | 데이터 타입이 연산이나 함수에 맞지 않을 때 발생한다. | |
| 데이터 참조 | IndexError | 리스트 등의 인덱스 참조 범위를 초과할 때 발생한다. |
| KeyError | 딕셔너리에 존재하지 않는 키를 참조할 때 발생한다. | |
| 시스템/파일 | FileNotFoundError | 지정한 파일 또는 경로를 찾을 수 없을 때 발생한다. |
| 특수 | RuntimeError | 로직 에러가 아닌, 실행 중 시스템 상태가 꼬였을 때 발생하는 에러이다. |
3. finally: 리소스 정리 및 활용
finally 블록은 예외 발생 여부와 관계없이 무조건 실행된다. 주로 파일 핸들 닫기, 네트워크 연결 해제, DB 커넥션 종료와 같은 사후 정리 작업을 수행할 때 사용한다.
try:
f = open("data.txt", "r")
# File I/O 작업 수행
except FileNotFoundError:
print("Error: 파일을 찾을 수 없다.")
except Exception as e:
print(f"Unexpected Error: {e}")
finally:
# 예외 발생 여부와 무관하게 리소스 해제 실행
print("Executing resource cleanup and terminating process.")
마무리
모든 예외를 포괄하는 Exception과 구체적인 원인을 나타내는 개별 예외들의 차이를 이해하면 더 정교한 예외 처리가 가능하다. 구체적인 예외를 상단에, 포괄적인 Exception을 하단에 배치하는 다중 핸들링을 통해 견고한 시스템을 설계할 수 있다.
더 자세한 내용은 파이썬 공식 문서를 참고한다.
👉 Python 공식 Exception 문서
💡 참고: input() 함수 상세 가이드
1) 정의
input()은 프로그램을 실행하는 사용자로부터 키보드 입력을 직접 받기 위해 사용하는 파이썬의 표준 입력 함수이다.
2) 원형
input(prompt=None)
- prompt: 입력을 받기 전 화면에 출력할 안내 메시지이다.
3) 특징
- 기본 타입: 사용자가 무엇을 입력하든 파이썬은 이를 항상 문자열(String)로 받아들인다.
- 캐스팅: 입력받은 데이터를 숫자(정수, 실수)로 활용하려면 int()나 float() 함수를 사용해 데이터 타입을 강제로 변환해야 한다.
4) 예제 (Exception & Finally 활용)
try:
score_str = input("점수를 입력하세요: ")
score = int(score_str) # 문자열을 정수로 캐스팅
print(f"입력된 점수: {score}점")
except ValueError:
# 정수가 아닌 값이 입력되었을 때 예외 처리
print("Error: 정수 형태의 숫자만 입력 가능하다.")
finally:
# 예외 발생 여부와 관계없이 프로세스 종료 안내
print("데이터 입력 프로세스를 종료한다.")'Dev > Python' 카테고리의 다른 글
| 파이썬 기초: 표준 라이브러리(Standard Library) 활용하기 (0) | 2026.01.13 |
|---|---|
| 파이썬 기초: 모듈(Module)과 패키지(Package)의 활용 (0) | 2026.01.12 |
| 파이썬 기초: 클래스(Class)와 객체(Object)의 이해 (0) | 2026.01.03 |
| 파이썬 기초: 함수(Function)의 정의와 활용 (0) | 2026.01.02 |
| 파이썬 기초: 자료형 심화 (리스트와 데이터 관리) (0) | 2026.01.01 |