Gidhub BE Developer

사용자 정의 예외, assert

2018-02-08
goodGid

사용자정의 예외

  • 내장 예외만으로 표현하는 데 한계가 있다.

  • 사용자정의 예외에 대해 알아보자.


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


Recommend

Index