티스토리 뷰

오류 만들기

프로그램 수행 도중 특수한 경우에만 예외처리를 하기 위해서 종종 오류를 만들어서 사용하게 된다.

직접 오류를 만들어 보자. 오류는 다음과 같이 파이썬 내장 클래스인 Exception클래스를 상속하여 만들 수 있다.

class MyError(Exception):
    pass

그리고 별명을 출력해 주는 함수를 다음과 같이 작성해 보자.

def say_nick(nick):
    if nick == '바보':
        raise MyError()
    print(nick)

그리고 다음과 같이 say_nick 함수를 호출 해 보자.

say_nick("천사")
say_nick("바보")

실행 해 보면 다음과 같이 "천사"가 한번 출력된 후 MyError가 발생하는 것을 알 수 있다.

천사
Traceback (most recent call last):
  File "...", line 11, in <module>
    say_nick("바보")
  File "...", line 7, in say_nick
    raise MyError()
__main__.MyError

이번에는 MyError가 발생할 경우 예외처리기법을 이용하여 예외처리를 해 보도록 하자.

try:
    say_nick("천사")
    say_nick("바보")
except MyError:
    print("허용되지 않는 별명입니다.")

실행 하면 다음과 같이 출력된다.

천사
허용되지 않는 별명입니다.

만약 오류메시지를 이용하고 싶다면 다음처럼 예외처리를 해야 할 것이다.

try:
    say_nick("천사")
    say_nick("바보")
except MyError as e:
    print(e)

하지만 실행 해 보면 print(e)로 출력한 오류메시지가 아무것도 출력되지 않는것을 확인 할 수 있다. 오류 메시지를 출력했을 때 오류 메시지가 보이게 하기 위해서는 오류 클래스에 다음과 같은 __str__ 메써드를 구현해야 한다. __str__ 메써드는 print(e) 처럼 오류메시지를 print문으로 출력할 경우에 호출되는 메써드이다.

class MyError(Exception):
    def __str__(self):
        return "허용되지 않는 별명입니다."

다시 실행해 보면 "허용되지 않는 별명입니다."라는 오류메시지가 출력되는 것을 확인할 수 있다. 만약 에러 발생시점에 오류메시지를 전달하고 싶다면 다음과 같이 수정해야 한다.

class MyError(Exception):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg


def say_nick(nick):
    if nick == '바보':
        raise MyError("허용되지 않는 별명입니다.")
    print(nick)

try:
    say_nick("천사")
    say_nick("바보")
except MyError as e:
    print(e)

raise MyError("허용되지 않는 별명입니다.")처럼 오류 발생시점에 메시지를 전달할 수 있다.

댓글
공지사항
최근에 올라온 글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함