이번에는 예외처리에서 raise와 assert에 대해 알아보겠습니다.
먼저 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는 프로그램의 중간중간에 점검을 하기 위해서 많이 사용합니다.
변수의 값이 올바른지, 함수가 실행되서 올바른 결과가 나왔는지 등 여러 가지로 코드 중간중간에 넣어줌으로 계속해서 확인해줍니다.
'자료실 > 파이썬(Python)' 카테고리의 다른 글
파이썬(Python) - 난수생성 random모듈 (0) | 2020.07.28 |
---|---|
파이썬(Python) - 얕은 복사, 깊은복사 (0) | 2020.07.27 |
파이썬(Python) - 예외 처리(Exception) (0) | 2020.07.17 |
파이썬(Python) - 클래스 _ 메서드(method) (0) | 2020.07.16 |
파이썬(Python) - 클래스 _ 상속 (0) | 2020.07.15 |
댓글