사용자정의 예외
-
내장 예외만으로 표현하는 데 한계가 있다.
-
사용자정의 예외에 대해 알아보자.
class NegativeDivisionError(Exception):
def __init__(self, value):
self.value = value
def PositiveDivide(a,b):
if( b < 0 ):
raise NegativeDivisionError(b)
return a / b
try:
ret = PositiveDivide(10,-3)
except NegativeDivisionError as e:
print('Negative Error :', e.value)
except ZeroDivisionError as e:
print('Zero Error :', e.args[0])
except :
print('Unexpected Exception!')
# b = -3일 때
Negative Error : -3
# b = 0일 때
Zero Error : division by zero
-
모든 사용자정의 예외는 내장 예외인 Exception 클래스나 그 하위 클래스를 상속받아 구현해야 한다.
-
전달해야 할 인자가 있는 경우에는 생성자에서 클래스 멤버 변수를 이용해 저장할 수 있다.
-
이렇게 정의된 클래스는 개발자가 원하는 경우에 raise 구문으로 예외를 발생시킬 수 있다.
assert 구문
-
일반적으로
assert
구문은 개발 과정에서제약사항
을설정
할목적
으로 사용하며인자로 받은 조건식이 거짓인 경우
AssertionError
가 발생한다.
assert <조건식>, <관련 데이터>
- 위의 표현식은 다음과 동일하다.
if __debug__:
if not <조건식>:
raise AssertionError(<관련 데이터>)
-
‘관련 데이터’는 예외가 발생할 경우에
AssertionError
의 인자로 전달되며 생략 가능하다. -
내부 변수인
__debug__
가 True인 경우에만assert
구문이 활성화되며 False인 경우에는 수행되지 않는다.
def foo(x):
assert type(x) == int, "Input value must be integer"
return x * 10
ret = foo("A")
print(ret)
Traceback (most recent call last):
File "/Users/gy8971/Desktop/gid/1.Programming/Python/init.py", line 6, in <module>
ret = foo("A")
File "/Users/gy8971/Desktop/gid/1.Programming/Python/init.py", line 3, in foo
assert type(x) == int, "Input value must be integer"
AssertionError: Input value must be integer