CodeGym /자바 코스 /Python SELF KO /예외 발생시키기

예외 발생시키기

Python SELF KO
레벨 18 , 레슨 0
사용 가능

6.1 의도적인 예외 발생시키기

Python에서는 raise 연산자를 사용해서 의도적으로 예외를 발생시킬 수 있어. 이를 통해 프로그램에서 오류나 잘못된 상황이 발생했음을 알릴 수 있지. 이제 raise 연산자를 사용하는 다양한 방법과 예외 다시 포장(repackaging)에 대해 알아보자.

표준 예외 발생시키기

이 연산의 일반적인 문법은 다음과 같아:


raise exception

Exception, TypeError 같은 표준 예외를 적절한 메시지와 함께 발생시킬 수 있어.

예제: raise Exception


def check_number(value):
    if value < 0:
        raise Exception("미안, 0보다 작은 숫자는 안 돼")
        
try:
    check_number(-5)
except Exception as e:
    print(f"예외 잡힘: {e}")

이 예제에서는, 값이 0보다 작을 경우 "미안, 0보다 작은 숫자는 안 돼"라는 메시지와 함께 Exception이 발생해.

예제: raise TypeError


def check_integer(value):
    if not isinstance(value, int):
        raise TypeError("정수만 허용돼")
        
try:
    check_integer("string")
except TypeError as e:
    print(f"예외 잡힘: {e}")

이 예제에서는 값이 정수가 아니면 "정수만 허용돼"라는 메시지와 함께 TypeError가 발생해.

6.2 예외 다시 포장하기

때로는 하나의 예외를 잡아 더 구체적이거나 유용한 정보를 제공하는 또 다른 예외를 발생시킬 필요가 있어. 이때 raise ... from 연산자를 사용하면 원래의 예외를 새로운 예외의 원인으로 유지시킬 수 있어.

이 연산의 일반적인 문법은 다음과 같아:


raise new_exception from old_exception

예제: 예외 다시 포장하기


class EmptyVariableError(Exception):
    pass
        
def check_non_empty(value):
    if value == "":
        raise ValueError("변수가 비었어")
        
try:
    check_non_empty("")
except ValueError as e:
    raise EmptyVariableError("빈 변수 감지됨") from e

이 예제에서는, 변수가 비어있을 경우 먼저 "변수가 비었어"라는 메시지와 함께 ValueError가 발생해. 그런 다음 이 예외가 잡혀 "빈 변수 감지됨"라는 새로운 예외인 EmptyVariableError가 발생하며, from을 통해 원래의 예외가 전달돼.

6.3 다시 포장된 예외 분석하기

raise ... from 연산자를 사용하는 것은 예외 체인의 정보를 유지할 수 있게 해주는데, 이는 디버깅에 유용해. 다시 포장된 예외와 그 원인을 분석할 수 있어.

다시 포장된 예외 분석 예제:


class EmptyVariableError(Exception):
    pass
        
def check_non_empty(value):
    if value == "":
        raise ValueError("변수가 비었어")
        
try:
    check_non_empty("")
except ValueError as e:
    raise EmptyVariableError("빈 변수 감지됨") from e

위 코드를 실행하면 다음과 같은 결과가 나와:


Traceback (most recent call last):
    File "example.py", line 8, in 
        check_non_empty("")
    File "example.py", line 5, in check_non_empty
        raise ValueError("변수가 비었어")
ValueError: 변수가 비었어
          
The above exception was the direct cause of the following exception:
          
Traceback (most recent call last):
    File "example.py", line 10, in 
        raise EmptyVariableError("빈 변수 감지됨") from e
EmptyVariableError: 빈 변수 감지됨

첫 번째 오류 (녹색으로 표시)는 코드 깊은 곳에서 발생한 원래 오류야. 가끔 이런 오류가 발생할 수 있는데, 프로그램의 정상적인 행동이야.

두 번째 오류 (파란색으로 표시)는 좀 더 높은 수준의 오류야. 너의 프로그램이나 프레임워크가 어떻게 처리해야 할지 알아야 해. 만약 더 깊이 탐색하여 오류 발생 이유를 알고 싶다면, 여기서 녹색 오류가 도움이 될 거야.

모든 것이 매우 합리적으로 이루어져 있어.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION