본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
파이썬 🛡️: 견고한 코드의 방패, 예외 처리와 모듈 활용법

안녕하세요, 여러분! 😊
지난 시간에는 객체지향 프로그래밍(OOP)의 세계를 탐험하며 클래스, 인스턴스, 상속, 그리고 매직 메소드 등을 통해 어떻게 현실 세계의 개념을 코드로 구조화하는지 배웠습니다. 🏗️ 객체를 활용하여 데이터와 행동을 캡슐화하고, 상속을 통해 코드를 재사용하며, 추상 클래스로 공통 인터페이스를 정의하는 등, 프로그램을 더욱 체계적이고 유연하게 만드는 방법을 익혔죠. 이제 여러분은 OOP의 강력함을 활용하여 더 복잡하고 잘 설계된 애플리케이션을 만들 준비가 되셨을 겁니다!
예를 들어, Car 클래스를 만들고 start_engine() 메소드를 구현하거나, Animal 클래스를 상속받아 Dog와 Cat 클래스를 만드는 등, OOP는 코드의 가독성과 유지보수성을 크게 향상시키는 열쇠였습니다. 🔑
자, 이제 우리는 한 단계 더 나아가, 예기치 못한 상황에 대비하고 코드를 효율적으로 관리하는 방법을 배울 시간입니다. 바로 예외 처리(Error Handling)와 모듈(Modules)입니다! 🚀
프로그램은 항상 우리가 예상한 대로만 흘러가지 않습니다. 사용자의 잘못된 입력, 파일 접근 실패, 네트워크 오류 등 다양한 변수가 발생할 수 있죠. 😨 예외 처리는 이러한 오류 발생 시 프로그램이 비정상적으로 종료되는 것을 막고, 우아하게 대처할 수 있도록 도와주는 필수적인 기술입니다.
또한, 프로그램의 규모가 커지면 코드를 기능별로 분리하고 재사용하는 것이 중요해집니다. 모듈은 바로 이러한 코드 구성과 관리를 위한 핵심 도구입니다. 🧩
오늘 함께 알아볼 내용은 다음과 같습니다:
- 예외 처리 (Error Handling): 예상치 못한 오류에 대처하기!
- try...except: 오류를 감지하고 처리하는 기본 구조 🎣
- try...finally: 오류 발생 여부와 관계없이 항상 실행되는 코드 블록 🧹
- 여러 개의 오류 처리하기: 다양한 예외 상황에 맞춤 대응 🩹
- 에러 발생시키기 (raise): 의도적으로 예외를 일으키는 방법 ⚠️
- Custom 예외 만들기: 나만의 예외 유형 정의하기 🏷️
- 모듈 (Modules): 코드를 나누고 재사용하는 기술!
- 모듈이란?: 파이썬 코드 파일의 의미와 역할 📦
- 모듈 사용법 (import, from...import): 다른 파일의 코드 가져오기 🔗
- 내장 모듈 (Built-in modules): 파이썬이 기본 제공하는 강력한 도구들 (math, random, datetime 등) 🔧
- 내장 함수 (Built-in Functions): 언제든 바로 사용 가능한 기본 함수들 (print, len, type 등) ✨
프로그램의 안정성을 높이고 코드의 구조를 개선할 준비, 되셨나요? 함께 예외 처리와 모듈의 세계로 떠나봅시다! 💪

예외 처리 (Error Handling): 예상치 못한 상황에 대비하기 🛡️
예외(Exception)는 프로그램 실행 중 발생하는 오류를 의미합니다. 예외 처리는 이러한 오류가 발생했을 때 프로그램이 중단되지 않고 적절한 조치를 취하도록 하는 메커니즘입니다.
try...except: 오류 감지와 처리의 기본
가장 기본적인 예외 처리 구문입니다.
- try 블록: 오류가 발생할 가능성이 있는 코드를 넣습니다.
- except 블록: try 블록에서 특정 예외가 발생했을 때 실행될 코드를 넣습니다.
try:
numerator = int(input("분자를 입력하세요: "))
denominator = int(input("분모를 입력하세요: "))
result = numerator / denominator
print(f"나눗셈 결과: {result}")
except ZeroDivisionError:
print("오류: 0으로 나눌 수 없습니다.")
except ValueError:
print("오류: 유효한 숫자를 입력해주세요.")
위 코드에서 사용자가 분모에 0을 입력하면 ZeroDivisionError가 발생하여 해당 except 블록이 실행되고, 숫자가 아닌 값을 입력하면 ValueError가 발생하여 다른 except 블록이 실행됩니다. 오류가 발생하지 않으면 except 블록은 건너뜁니다.
여러 개의 오류 함께 처리하기
하나의 except 블록에서 여러 종류의 예외를 동시에 처리할 수도 있습니다. 튜플 형태로 묶어주면 됩니다.
try:
# ... (이전 코드와 동일) ...
result = numerator / denominator
print(f"나눗셈 결과: {result}")
except (ZeroDivisionError, ValueError) as e: # 여러 에러를 한번에 처리
print(f"입력 오류가 발생했습니다: {e}") # e 변수로 에러 메시지 확인 가능
또는, 어떤 오류가 발생하든 동일하게 처리하고 싶다면 Exception (모든 예외의 부모 클래스)을 사용할 수 있습니다.
try:
# ...
except Exception as e:
print(f"알 수 없는 오류 발생: {e}")
try...finally: 뒷정리는 확실하게!
finally 블록은 try 블록에서 예외 발생 여부와 관계없이 항상 실행됩니다. 주로 파일 닫기, 리소스 해제 등 마무리 작업에 사용됩니다.
file = None # file 변수 초기화
try:
file = open("my_file.txt", "r")
content = file.read()
print("파일 내용:", content)
except FileNotFoundError:
print("오류: 파일을 찾을 수 없습니다.")
finally:
if file: # 파일 객체가 성공적으로 생성되었을 경우에만 close 호출
print("파일을 닫습니다.")
file.close()
try...except...finally 형태로 모두 함께 사용할 수도 있습니다.
에러 발생시키기 (raise): 필요할 때 직접 신호 보내기

때로는 프로그램 로직 상 특정 조건에서 오류가 발생했다고 명시적으로 알릴 필요가 있습니다. 이때 raise 키워드를 사용합니다.
def check_age(age):
if age < 0:
raise ValueError("나이는 음수일 수 없습니다.")
elif age < 19:
print("미성년자입니다.")
else:
print("성인입니다.")
try:
check_age(25)
check_age(-5) # 여기서 ValueError 발생
except ValueError as e:
print(f"처리 중 오류 발생: {e}")
# 출력:
# 성인입니다.
# 처리 중 오류 발생: 나이는 음수일 수 없습니다.
Custom 예외 만들기: 나만의 오류 정의하기
파이썬의 기본 예외 유형 외에, 애플리케이션의 특정 상황에 맞는 예외를 직접 정의할 수 있습니다. Exception 클래스를 상속받아 만듭니다.
# 사용자 정의 예외 클래스
class InvalidInputError(Exception):
def __init__(self, message="잘못된 입력입니다."):
self.message = message
super().__init__(self.message)
def process_data(data):
if not isinstance(data, str):
raise InvalidInputError("데이터는 문자열이어야 합니다.")
print(f"데이터 처리 완료: {data}")
try:
process_data("정상 데이터")
process_data(123) # 여기서 InvalidInputError 발생
except InvalidInputError as e:
print(f"사용자 정의 오류 발생: {e}")
# 출력:
# 데이터 처리 완료: 정상 데이터
# 사용자 정의 오류 발생: 데이터는 문자열이어야 합니다.
Custom 예외를 사용하면 오류의 원인을 더 명확하게 파악하고 관리할 수 있습니다.
모듈 (Modules): 코드 구성과 재사용의 열쇠 🔑
모듈(Module)은 파이썬 정의와 문장들을 담고 있는 파일(.py 확장자)입니다. 프로그램이 커지면 관련된 함수, 클래스, 변수 등을 별도의 모듈 파일로 분리하여 코드를 체계적으로 관리하고 재사용성을 높일 수 있습니다.
모듈 사용법 (import, from...import)
다른 모듈의 코드를 사용하려면 import 문을 사용합니다.
1. import 모듈이름
모듈 전체를 가져옵니다. 모듈 내의 함수나 변수를 사용하려면 모듈이름.요소이름 형식으로 접근해야 합니다.
# math 모듈 가져오기 (수학 관련 함수 제공)
import math
print(math.sqrt(16)) # 제곱근 계산 -> 4.0
print(math.pi) # 원주율 파이 -> 3.141592653589793
2. from 모듈이름 import 요소이름
모듈에서 특정 요소(함수, 클래스, 변수)만 직접 가져옵니다. 가져온 요소는 모듈 이름을 붙이지 않고 바로 사용할 수 있습니다.
# random 모듈에서 randint 함수만 가져오기
from random import randint
print(randint(1, 10)) # 1부터 10 사이의 임의의 정수 출력
3. import 모듈이름 as 별칭
모듈 이름이 길거나 다른 이름과 충돌할 때 별칭(alias)을 지정할 수 있습니다.
import pandas as pd # 데이터 분석 라이브러리 pandas를 pd라는 별칭으로 사용
# data = {'col1': [1, 2], 'col2': [3, 4]}
# df = pd.DataFrame(data)
# print(df)
내장 모듈 (Built-in modules)
파이썬을 설치하면 기본적으로 함께 제공되는 유용한 모듈들입니다. 별도의 설치 없이 import하여 바로 사용할 수 있습니다.
- math: 수학 함수 (삼각함수, 로그, 제곱근 등)
- random: 난수 생성 관련 함수
- datetime: 날짜 및 시간 처리
- os: 운영체제와 상호작용 (파일 경로, 디렉토리 관리 등)
- json: JSON 데이터 처리
- re: 정규 표현식
import datetime
import os
now = datetime.datetime.now()
print(f"현재 시간: {now}")
current_directory = os.getcwd()
print(f"현재 작업 디렉토리: {current_directory}")
내장 함수 (Built-in Functions)
모듈과 달리, import 과정 없이 파이썬 어디서든 바로 사용할 수 있는 기본적인 함수들입니다. 이미 익숙하게 사용해왔을 겁니다.
- print(): 값을 출력
- len(): 객체의 길이(항목 수) 반환
- type(): 객체의 자료형 반환
- int(), float(), str(), list(), dict(), tuple(): 형 변환 함수
- input(): 사용자 입력 받기
- range(): 연속된 숫자 생성
- ... 등등
이들은 파이썬의 가장 기본적인 기능을 제공하며, 프로그래밍의 기초를 이룹니다.
정리하며 📝
오늘은 프로그램의 안정성을 높이는 예외 처리와 코드의 구조를 잡고 재사용성을 높이는 모듈에 대해 배웠습니다.
- 예외 처리 (try, except, finally, raise) 🛡️: 예기치 못한 오류 발생 시 프로그램이 중단되는 것을 막고, 오류 상황에 적절히 대응하여 코드의 견고함을 더합니다. Custom 예외를 통해 더 명확한 오류 관리가 가능합니다.
- 모듈 (import, from...import) 🧩: 코드를 기능 단위로 분리하여 관리하고, 다른 파일의 코드를 쉽게 가져와 재사용할 수 있게 합니다. 파이썬의 강력한 내장 모듈과 항상 사용 가능한 내장 함수는 개발 생산성을 크게 높여줍니다.
지난 시간에 배운 객체지향 프로그래밍(OOP)이 코드의 구조와 설계를 위한 것이었다면, 오늘 배운 예외 처리와 모듈은 그 구조를 더 튼튼하게 만들고 효율적으로 관리하기 위한 필수 요소입니다. 마치 건물을 지을 때 튼튼한 기초(OOP) 위에 안전 설비(예외 처리)를 갖추고, 각 공간(모듈)을 용도에 맞게 구획하는 것과 같습니다.
이 개념들을 잘 활용하면 더욱 안정적이고, 유지보수하기 쉬우며, 확장 가능한 파이썬 프로그램을 만들 수 있을 것입니다! ✨

오늘 배운 내용들을 통해 더 안정적이고 구조화된 코드를 작성하실 수 있을 거예요. 오늘도 정말 수고 많으셨습니다! 💪 다음 시간에는 또 어떤 유용한 파이썬 지식으로 돌아올지 기대해주세요! 즐거운 코딩하세요! 👋
'데이터 엔지니어링' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 44일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.05.14 |
|---|---|
| 패스트캠퍼스 환급챌린지 43일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.05.13 |
| 패스트캠퍼스 환급챌린지 40일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.05.10 |
| 패스트캠퍼스 환급챌린지 39일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.05.09 |
| 패스트캠퍼스 환급챌린지 38일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.05.08 |