개발로그필름

[Python] raise : 예외를 발생시키는 방법과 활용법 본문

IT/Python

[Python] raise : 예외를 발생시키는 방법과 활용법

yuullog 2025. 3. 18. 13:17
728x90
반응형
SMALL

 

 

 

SMALL

 

 

Python에서 오류를 처리할 때 try-except 블록을 자주 사용한다

그런데 때로는 개발자가 직접 예외를 발생시켜야 할 때가 있다

이때 사용하는 것이 바로 raise 문!!

 

 

 

1. raise란?

  • Python에서 예외를 강제로 발생시키는 키워드
  • 특정 조건에서 프로그램이 원하는 방식으로 동작하도록 제어할 수 있다

 

반응형

 

 

기본적인 raise 사용법

raise ValueError("잘못된 값이 입력되었습니다.")

위 코드를 실행하면 아래와 같은 ValueError가 발생해 프로그램이 중단된다

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 잘못된 값이 입력되었습니다.

 

 

2. raise 문법

raise 예외_클래스(예외_메시지)

예외 클래스는 Python 내장 예외(ex. ValueError, TypeError)를 사용할 수도 있고,

개발자가 직접 정의한 사용자 예외 클래스를 사용할 수도 있다

 

2.1 특정 예외 발생시키기

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("0으로 나눌 수 없습니다.")
    return a / b

print(divide(10, 2))  # 정상 동작
print(divide(10, 0))  # ZeroDivisionError 발생

 

2.2 예외 다시 발생시키기

except 블록에서 예외를 잡은 후, 다시 예외를 발생시킬 수도 있다

def process_data(data):
    try:
        if not isinstance(data, int):
            raise TypeError("정수만 입력 가능합니다.")
    except TypeError as e:
        print("예외 발생:", e)
        raise  # 다시 예외를 발생시킴

process_data("hello")

process_data("hello")를 실행하면 예외가 한 번 출력된 후 다시 발생하여 프로그램이 종료된다

 

 

 

3. 사용자 정의 예외

Python에서는 내장 예외 클래스 외에도 사용자가 직접 예외 클래스를 정의할 수 있다

Exception 클래스를 상속받아 새로운 예외 클래스를 만들 수 있다

class CustomError(Exception):
    pass

raise CustomError("이것은 사용자 정의 예외입니다!")

사용자 정의 예외를 활용하면 특정 상황에 맞는 보다 직관적인 오류 처리를 구현할 수 있다

 

3.1 사용자 정의 예외 활용 예시

class InvalidAgeError(Exception):
    def __init__(self, age, message="유효하지 않은 나이입니다."):
        self.age = age
        self.message = message
        super().__init__(self.message)

    def __str__(self):
        return f"{self.age}는 {self.message}"

def check_age(age):
    if age < 0:
        raise InvalidAgeError(age)
    print(f"입력된 나이: {age}")

check_age(25)  # 정상 출력
check_age(-5)  # InvalidAgeError 발생

 

 

 

4. 활용 사례

4.1 입력값 검증

def get_positive_number(value):
    if value <= 0:
        raise ValueError("양수를 입력해야 합니다.")
    return value

print(get_positive_number(10))  # 10 출력
print(get_positive_number(-3))  # ValueError 발생

 

 

4.2 특정 조건에서 실행 중단

def validate_data(data):
    if "error" in data:
        raise RuntimeError("데이터에 오류가 포함되어 있습니다.")
    return "데이터 정상 처리"

print(validate_data("good_data"))  # 정상 출력
print(validate_data("error"))  # RuntimeError 발생

 

 

4.3 API 응답 예외 처리

def fetch_data(response):
    if response.status_code != 200:
        raise ConnectionError(f"서버 응답 오류: {response.status_code}")
    return response.json()

 

 

 

5. raise 사용 시 주의할 점

  • 명확한 예외 클래스 사용: raise Exception("오류 발생")보다는 raise ValueError("잘못된 값입니다.")처럼 구체적인 예외를 사용
  • 불필요한 예외 발생 자제: 지나치게 많은 raise는 코드 가독성을 떨어뜨릴 수 있다
  • 예외 메시지 활용: raise를 사용할 때는 오류 원인을 명확히 설명하는 메시지를 포함하는 것이 좋다

 

 

 

6. 정리

  • raise는 Python에서 예외를 강제로 발생시키는 키워드
  • raise를 활용하면 코드의 오류를 명확히 정의하고, 예외 처리 로직을 체계적으로 설계할 수 있다
  • 내장 예외 클래스뿐만 아니라, 사용자 정의 예외를 만들어 상황에 맞는 오류를 처리할 수 있다
  • 실전에서는 데이터 검증, API 응답 처리, 특정 조건에서 실행 중단 등의 용도로 활용된다
반응형
LIST