자료실/파이썬(Python)

파이썬(Python) - 예외 처리(Exception) _ raise, assert

자료수집중 2020. 7. 18.
반응형

 

이번에는 예외처리에서 raiseassert에 대해 알아보겠습니다.

 

먼저 raise는 강제로 예외를 발생시킬 수 있습니다.

강제로 예외를 발생시키기 위한 예제를 작성해보겠습니다.

while 1:
    a = input("숫자 입력 : ")
    try:
        if int(a) == 1:
            raise ValueError
        elif int(a) == 2:
            raise TypeError
        elif int(a) == 3:
            raise NameError
        print("입력하신 값은 : ", float(a))
    except ValueError:
        print("1 입력")
    except TypeError:
        print("2 입력")
    except NameError:
        print("3 입력")
    else:
        break
    finally:
        print("------------------------")

입력 값이 1, 2, 3일때 각각 ValueError, TypeError, NameError을 발생하게 했습니다.

 

근데 기존에 있는 예외로 처리하다보면 내용과 어울리지 않는 경우가 많습니다.

그래서 예외를 직접 만들 수 있습니다.

앞에서 Exception가 모든 예외의 상위 클래스라고 했습니다.

Exception를 상속받은 클래스를 이용해서 예외를 직접 만들 수 있습니다.

위의 예제를 이용해서 직접 간단하게 예외를 만들어 보겠습니다.

class InputOne(Exception):
    def __init__(self):
        super().__init__("1 입력")


class InputTwo(Exception):
    def __init__(self):
        super().__init__("2 입력")


class InputThree(Exception):
    def __init__(self):
        super().__init__("3 입력")


while 1:
    a = input("숫자 입력 : ")
    try:
        if int(a) == 1:
            raise InputOne
        elif int(a) == 2:
            raise InputTwo
        elif int(a) == 3:
            raise InputThree
        print("입력하신 값은 : ", float(a))
    except Exception as e:
        print("예외 발생 : ",e)
    else:
        break
    finally:
        print("------------------------")

Exception를 상속 받은 클래스명이 예외의 이름이 됩니다.

예외 메시지를 출력하기 위해서 클래스가 초기화될 때 부모 클래스인 Exception__init__에 메시지를 넘겨주면 됩니다.

 

 

다음으로 assert는 가정설정문이라고 합니다.

조건을 걸어서 거짓이 되면 AssertionError를 발생시키고 입력된 메시지를 출력합니다.

asser 조건, 메시지

메시지는 생략이 가능합니다.

간단한 예제로 살펴보겠습니다.

a = input("숫자 입력 : ")
assert a == 0, "a는 0이 아닙니다."

AssertionError가 발생하며 입력된 메시지가 같이 출력됩니다.

assert는 프로그램의 중간중간에 점검을 하기 위해서 많이 사용합니다.

변수의 값이 올바른지, 함수가 실행되서 올바른 결과가 나왔는지 등 여러 가지로 코드 중간중간에 넣어줌으로 계속해서 확인해줍니다.

댓글