Day004 - 예외처리(Exception), 모듈(Module), 클래스(Class)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Day004 - 예외처리(Exception), 모듈(Module), 클래스(Class)
오늘은 예외처리(Exception Handling) 및 모듈(Module), 패키지(Package), 그리고 클래스(Class)와 파일 처리(CSV/JSON)를 학습했다. 에러에 대비해 안정적으로 구동되고 데이터를 영속적으로 저장하며 구조화하는 방법에 대해 학습한 내용을 정리해 본다.
1. 예외 처리(Exception Handling) 및 모듈(Module), 패키지(Package)
프로그램 실행 중 발생하는 에러(Error)로 인해 시스템이 중단되는 현상을 방지하기 위해 try-except 문법을 사용했다. 발생 가능한 예외 형태(ValueError, ZeroDivisonError, FileNotFoundError 등)를 명확히 지정하여 대처하고, else 와 finally 블록을 활용해 상황별 로직을 분기하는 흐름을 정립했다. 또한 직접 예외를 발생시키는 raise 구문과 모든 예외의 최상위 클래스인 Exception 의 활용법을 학습했다.
![]() |
| 예외 처리(try - except - else - finally) 실행 흐름도 |
더불어 코드의 재사용성을 높이는 모듈(Module)과 패키지(Package) 구조를 습득했다. Python 표준 라이브러리(math, random, datetime) 활용법과 더불어 패키지 폴더 내 __init__.py 의 역할을 이해하고 외부 라이브러리(rich)를 설치하여 터미널 출력을 시각적으로 개선하는 실습도 진행했다.
# 예외 처리 및 다중 except 적용 예시
def safe_division(a, b):
try:
result = a / b
except ZeroDivisionError:
print("[오류] 0으로 나눌 수 없습니다.")
return None
except TypeError:
print("[오류] 숫자형 데이터만 연산 가능합니다.")
return None
else:
return result
finally:
print("연산 시도가 완료되었습니다.")2. 파일 처리(Text, CSV, JSON) 및 클래스(Class)
데이터 영속화를 위해 open() 함수와 with 구문을 이용한 파일 읽기/쓰기를 진행했다. 상대경로와 절대 경로의 차이를 다루며, 한글 깨짐 방지를 위해 encoding='utf-8' 옵션을 항상 적용하는 관례를 익혔다.
![]() |
| 상대 경로와 절대 경로의 차이점 |
- CSV 처리: csv.DictReader 를 활용해 데이터를 딕셔너리 형태로 읽어와 key 기반 접근을 진행했다. CSV 내 모든 값은 문자열로 처리되므로 연산 시, int() 형변환이 필수적임을 확인했다.
- JSON 처리: Python Dict/List와 일치하는 JSON 구조 특성을 활용해 json.load() 및 json.dump() 사용법을 익혔다. ensure_ascii=False 와 indent=2 옵션으로 한글 출력 표준화 및 가독성을 높였다.
![]() |
| 데이터 구조 변환 (CSV & JSON) |
데이터와 동작을 하나의 단위로 묶는 클래스(Class) 개념을 학습하며, __init__ 초기화 메서드(Method)와 객체(Object) 자신을 가리키는 self 키워드의 동작 원리를 파악했다. 객체지향의 핵심인 상속(Inheritance)과 메서드 오버라이딩(Method Overriding)을 다르며, 부모 클래스의 초기화를 호출하는 super().__init__() 활용법도 학습했다.
![]() |
| 클래스, 객체 및 상속 구조 |
# Shape 부모 클래스 및 Rectangle 자식 클래스 상속 예시
class Shape:
def __init__(self, name):
self.name = name
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
super().__init__("직사각형")
self.width = width
self.height = height
def area(self): # 메서드 오버라이딩
return self.width * self.height- Keep : 에러 메시지의 traceback 맨 아랫줄부터 차근착느 해석하며 원인을 파악하려는 자세를 유지했다.
- Problem: 클래스 정의 시, 메서드의 첫 번째 매개변수로 self 를 누락하거나, CSV 데이터를 가져 온 후 형변환을 잊어 연산 오류가 발생하는 실수가 있었다.
- Try: 파일 입출력 시, 예외처리를 감싸 안정성을 확보하는 습관을 들이고, 클래스 상속 구조 설계 시, 중복 코드를 최소화하는 연습을 꾸준히 이어갈 계획이다.


.png)

댓글
댓글 쓰기