파이썬 사용자 정의 예외 처리, 커스텀 예외 클래스 만들기
파이썬에서 예외 처리(Exception Handling)는 코드의 오류를 다루고, 프로그램이 중단되지 않고 적절히 대응할 수 있도록 돕습니다. 기본 제공 예외만으로는 충분하지 않을 때, 커스텀 예외를 만들어 특정 상황에 맞는 예외 처리를 구현할 수 있습니다. 이 글에서는 파이썬에서 사용자 정의 예외를 만드는 방법과 활용법을 심층적으로 분석해보겠습니다.
1. 예외 처리의 기본 개념
예외 처리란 프로그램 실행 중 발생하는 예외 상황(에러)을 관리하는 방법입니다. 파이썬에서는 try
, except
, else
, finally
블록을 사용하여 예외를 처리할 수 있습니다. 예를 들어, 파일을 읽을 때 파일이 존재하지 않으면 FileNotFoundError
예외가 발생합니다.
2. 기본 예외 클래스 상속하기
파이썬의 모든 예외는 BaseException
클래스를 상속받습니다. 사용자 정의 예외를 만들기 위해서는 Exception
또는 그 하위 클래스를 상속받아야 합니다. 기본적인 사용자 정의 예외 클래스는 다음과 같습니다:
class MyCustomError(Exception):
pass
3. 커스텀 예외 클래스 만들기
커스텀 예외 클래스는 다양한 속성과 메서드를 추가하여 더욱 세부적인 예외 처리를 할 수 있습니다. 예를 들어, 에러 메시지와 에러 코드를 포함하는 커스텀 예외 클래스를 만들어 봅시다:
class ValidationError(Exception):
def __init__(self, message, code):
super().__init__(message)
self.code = code
try:
raise ValidationError("Invalid input", 400)
except ValidationError as e:
print(f"Error: {e}, Code: {e.code}")
4. 커스텀 예외 사용하기
커스텀 예외를 사용하면 코드의 가독성을 높이고, 에러 발생 시 보다 구체적인 정보를 제공할 수 있습니다. 이를 통해 디버깅이 용이해지고, 예외 처리가 명확해집니다. 다음은 커스텀 예외를 사용하는 예제입니다:
class InsufficientFundsError(Exception):
def __init__(self, balance, amount):
super().__init__(f"Balance of {balance} is insufficient for withdrawal of {amount}")
self.balance = balance
self.amount = amount
class BankAccount:
def __init__(self, initial_balance):
self.balance = initial_balance
def withdraw(self, amount):
if amount > self.balance:
raise InsufficientFundsError(self.balance, amount)
self.balance -= amount
return self.balance
account = BankAccount(100)
try:
account.withdraw(150)
except InsufficientFundsError as e:
print(e)
5. 실전 예제
사용자 정의 예외는 다양한 상황에서 유용하게 사용될 수 있습니다. 예를 들어, 웹 애플리케이션에서 사용자의 입력을 검증할 때나, 파일 시스템의 상태를 확인할 때 등 다양한 상황에서 커스텀 예외를 통해 코드의 신뢰성을 높일 수 있습니다. 다음은 파일 처리 중 발생할 수 있는 다양한 예외를 커스텀 예외로 처리하는 예제입니다:
class FileProcessingError(Exception):
pass
class FileNotFoundError(FileProcessingError):
def __init__(self, filename):
super().__init__(f"File {filename} not found")
self.filename = filename
class FileReadError(FileProcessingError):
def __init__(self, filename):
super().__init__(f"Error reading file {filename}")
self.filename = filename
def read_file(filename):
if not os.path.exists(filename):
raise FileNotFoundError(filename)
try:
with open(filename, 'r') as file:
return file.read()
except IOError:
raise FileReadError(filename)
try:
content = read_file('example.txt')
except FileProcessingError as e:
print(e)
6. 결론
이 글에서는 파이썬에서 사용자 정의 예외를 만드는 방법과 그 활용법을 심층적으로 분석해보았습니다. 커스텀 예외를 사용하면 보다 구체적이고 명확한 예외 처리가 가능해지며, 코드의 유지보수성과 가독성을 크게 향상시킬 수 있습니다. 다양한 상황에 맞는 커스텀 예외를 만들어 코드의 품질을 높여보세요.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
파이썬(Python) 패키지 생성과 활용법 (0) | 2024.08.02 |
---|---|
파이썬(Python) 모듈 사용 방법, 기본부터 고급까지 (0) | 2024.08.01 |
파이썬(Python) 예외 처리 try, except, finally 활용 방법 (0) | 2024.07.30 |
파이썬(Python) 파일 처리 방법, 버퍼링, 예외 처리, 병렬 처리 (0) | 2024.07.29 |
파이썬(Python) 파일 쓰기, 기초부터 고급 테크닉까지 (0) | 2024.07.27 |