더북(TheBook)

사실 BigNumberError 클래스의 __init__() 생성자와 __str__() 메서드는 따로 정의하지 않고 그냥 pass로 두어도 동일하게 동작합니다. 하지만 생성자에서 추가로 어떤 작업을 해야 한다거나 __str__() 메서드에서 오류 메시지를 오류 코드와 함께 출력하고 싶은 경우에는 코드를 수정하면 됩니다. 가령 프로그램에 오류 코드를 다음과 같이 정의한다면 BigNumberError에서는 오류 코드 001을 출력하면 됩니다.

[001 : 두 자리 숫자가 입력됨]

[002 : 문자열이 입력됨]

[003 : 공백이 입력됨]

코드에 반영하면 다음과 같습니다.

class BigNumberError(Exception): # 사용자 정의 오류
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return "[오류 코드 001] " + self.msg # 오류 메시지 가공
try:
    print("한 자리 숫자 나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10: # 입력받은 수가 한 자리인지 확인
        # 자세한 오류 메시지
        raise BigNumberError("입력값 : {0}, {1}".format(num1, num2))
    print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
except ValueError:
    print("값을 잘못 입력했습니다. 한 자리 숫자만 입력하세요.")
except BigNumberError as err: # 사용자 정의 예외 처리
    print("오류가 발생했습니다. 한 자리 숫자만 입력하세요.")
    print(err) # 오류 메시지 출력

실행결과 icon_con

한 자리 숫자 나누기 전용 계산기입니다.
첫 번째 숫자를 입력하세요 : 10
두 번째 숫자를 입력하세요 : 5
오류가 발생했습니다. 한 자리 숫자만 입력하세요.
[오류 코드 001] 입력값 : 10, 5

10과 5를 입력하면 오류가 발생하고 예외 처리 구문에 추가한 문자열이 함께 출력됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.