사용자 정의 예외 발생시키기
때로는 내장된 Python 예외가 아닌 오류 조건을 알려야 할 필요가 있습니다. 이는 raise 문을 사용하여 자체 예외를 생성하고 발생시킬 수 있습니다. 이는 애플리케이션의 오류 처리를 보다 구체적이고 설명적으로 만드는 데 유용합니다.
먼저, 내장 예외를 raise하는 방법을 살펴보겠습니다. WebIDE 에서 ~/project/raise_exception.py 파일을 열고 다음 코드를 추가합니다.
def check_positive(number):
if number <= 0:
raise ValueError("Input must be a positive number")
print(f"The number {number} is positive.")
try:
check_positive(-5)
except ValueError as e:
print(f"Caught an exception: {e}")
try:
check_positive(10)
except ValueError as e:
print(f"Caught an exception: {e}")
파일을 저장하고 터미널에서 실행합니다.
python ~/project/raise_exception.py
출력 결과는 다음과 같습니다.
Caught an exception: Input must be a positive number
The number 10 is positive.
여기서 check_positive 함수는 입력이 양수가 아니면 ValueError를 발생시키고, 이는 except 블록에 의해 포착됩니다.
이제 사용자 정의 예외를 정의하고 발생시켜 보겠습니다. 사용자 정의 예외는 내장된 Exception 클래스를 상속받는 클래스입니다.
WebIDE 에서 ~/project/custom_exception.py 파일을 열고 다음 코드를 추가합니다.
class NegativeNumberError(Exception):
"""Custom exception raised for negative numbers."""
pass
def process_positive_number(number):
if number < 0:
raise NegativeNumberError("Negative numbers are not allowed")
print(f"Processing positive number: {number}")
try:
process_positive_number(-10)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
try:
process_positive_number(20)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
파일을 저장하고 터미널에서 실행합니다.
python ~/project/custom_exception.py
출력 결과는 다음과 같습니다.
Caught custom exception: Negative numbers are not allowed
Processing positive number: 20
이 예제에서는 자체 NegativeNumberError를 정의하고 특정 조건에서 이를 발생시켰습니다. 그런 다음 try...except 블록은 이 사용자 정의 오류 유형을 구체적으로 포착하여 오류 처리를 더욱 정밀하게 만듭니다.