inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자

사용자 정의 예외처리 중 질문

153

y Hong

작성한 질문수 2

0


class BignumberError(Exception):
    def __init__(self, msg):
        self.msg = msg
    def __str__(self):
        return self.msg

try:
    print("한자리수 전용 계산기 입니다.")
    num1 = int(input("숫자를 입력하세요 : "))
    num2 = int(input("숫자를 입력하세요 : "))
    num3 = int(num1/num2)
    print("{0} / {1} = {2}".format(num1, num2, num3))
    if num1 >=10 or num2 >= 10:
        raise BignumberError("입력값 :{0}, {1}".format(num1, num2))
except ValueError :
    print("오류! 한자리 숫자만 입력하세요")
except BignumberError as err :
    print("빅넘버에러 발생!")
    print(err)

    def __str__(self):
        return self.msg

위 코드 전문에서 제가 밑에 따로 적어둔 부분을 빼먹고 코드 작성을 했는데도

BignumberError 발생 하고 입력값을 알려주는 메시지가 정상적으로 표시가 되었습니다.

강의에서는 raise BignumberError("입력값 :{0}, {1}".format(num1, num2)) 이부분을 self.msg에 리턴해서 가지고 있다가 마지막 프린트문에서 출력이 된다고 했는데

리턴문이 없어도 잘 실행이 되는 이유는 뭘까요?

python

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

y Hong님의 질문에 대한 답변으로, 이해가 가지 않는 부분은 __str__ 메서드를 빼먹었음에도 BignumberError 발생 시, 입력값을 알려주는 메시지가 정상적으로 출력되는 원리에 관한 것입니다.

Python에서 Exception 클래스는 사용자가 정의한 예외 처리 클래스에서 상속받아 사용할 수 있습니다. 사용자 정의 예외 클래스에서 __str__ 메서드를 구현하지 않아도, Exception 클래스 내부에 이미 __str__ 메서드가 구현되어 있어, 예외 메시지를 출력할 수 있습니다. 즉, __str__ 메서드는 예외가 발생했을 때 문자열로 변환(return)해서 출력해주는 역할을 담당합니다.

질문하신 내용과 유사한 상황에 대한 설명은 강의 중 “사용자 정의 예외처리” 관련 질문에서도 찾아볼 수 있습니다. 해당 내용은 나도코딩님께서 답변하신 부분에서도 언급되었으며, 사용자 정의 예외 클래스가 Exception을 상속받으면, Exception__str__ 구현을 통해 에러 메시지가 출력될 수 있다는 것을 내포하고 있습니다.

아래의 질문&답변은 y Hong님의 질문과는 직접적인 관련은 없지만, Exception 클래스 상속과 관련된 이해를 돕기 위해 참고할 수 있는 내용입니다:
- class BigNumberError와 관련하여
- 사용자지정 예외 클래스 정의 구문의 상세 의미 질문

직접적으로 __str__을 구현하지 않았음에도 메시지가 정상적으로 출력되는 이유는 Exception 클래스 내부에 이미 에러 메시지를 문자열로 변환하는 기본적인 메커니즘이 구현되어 있기 때문입니다. 특별한 형태의 에러 메시지를 원할 때에만 사용자 정의 예외 클래스에서 __str__ 메서드를 오버라이드(재정의)하여 사용합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

quiz 8 오류 문제

0

70

1

str() 작성 위치

0

53

1

아나콘다

0

61

1

윈도우 설치 도와주세요

0

74

1

std_weight함수에서weight만return가능한가요?

0

69

1

오른쪽위 실행버튼을 누르면 터미널에 에러가 뜨고 컨트롤+F5를 누르면 에러가 안뜹니다.

0

36

1

설치해서 시작하는데 문제가 있습니다.

0

70

1

함수 입력할 때 설명 툴팁 나오게 하려면 어떻게 하나요?

0

105

1

2장 환경설정 문의

0

74

1

스타크래프트 프로젝트

0

74

1

python 파일명.py 입력시 Python 출력

0

134

1

로드맵 질문있습니다!

0

85

2

오류

0

74

1

질문 있습니다.

0

77

1

블로그에 학습한 내용을 정리해도 괜찮을까요?

0

172

1

#퀴즈 3의 5번 질문

0

72

1

print("ㅋ"*5) 에 대한 결과가 도출되지 않습니다

0

81

1

가변인자의 위치가 중요한가요?

0

79

1

vscode옛날 버전 설치

0

222

1

글자색상이 선생님처럼 안나옵니다

0

186

1

슬프네

0

156

1

quiz 6번 관련 문의입니다.

0

129

1

퀴즈#3에 대해서 이렇게 작성해도 되나요?

0

195

1

피드백 부탁드립니다

0

93

1