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: 빈 변수 감지됨
첫 번째 오류 (녹색으로 표시)
는 코드 깊은 곳에서 발생한 원래 오류야. 가끔 이런 오류가 발생할 수 있는데, 프로그램의 정상적인 행동이야.
두 번째 오류 (파란색으로 표시)
는 좀 더 높은 수준의 오류야. 너의 프로그램이나 프레임워크가 어떻게 처리해야 할지 알아야 해. 만약 더 깊이 탐색하여 오류 발생 이유를 알고 싶다면, 여기서 녹색 오류가 도움이 될 거야.
모든 것이 매우 합리적으로 이루어져 있어.
GO TO FULL VERSION