[ Python ] 자신만의 예외 클래스 정의하기 - 슬기로운 파이썬 트릭 책 中

2019. 9. 29. 20:15분석 Python/책 구현 리뷰

728x90

왼쪽과 오른쪽을 보면 왼쪽은 왜 틀린지는 아닌데, 머가 들어가서 틀린 지를 알 수가 없고,

오른쪽은 머가 들어가서 왜 틀린지 알 수도 있다.

그래서 명확히 이름을 부여하여 이름만 보고 예외를 처리할 수 있는 형태로 봐야 디버깅이 쉬워진다. 

class NameTooShort(ValueError) :
    pass
def validate(name) :
    if len(name) < 10 :
        raise NameTooShort(name)
        
validate("hi")

이렇게 하면 왜 에러가 걸린지를 명시해줘서 쉽게 디버깅이 된다.

이렇게 쓰는 것인지는 모르겠다... 으흠 맞겠지

현재 ValueError 부분을 세세하게 나눠서 처리를 하고 

만약 다른 에러가 나올 떄는 KeyError는 KeyError로 다른 예외처리는 Exception으로 빠지게 하기 

class BaseValidationError(ValueError) :
    pass
class NameTooLong(BaseValidationError) :
    pass
class NameTooShort(BaseValidationError) :
    pass
class NameTooCuteError(BaseValidationError) :
    pass
class BaseTypeError(TypeError) :
    pass
class IntTypeError(BaseTypeError) :
    pass
class ListTypeError(BaseTypeError) :
    pass
class RemainTypeError(BaseTypeError) :
    pass

def validate(name) :
    if type(name) == str : pass
    elif type(name) == int : raise IntTypeError(name)
    elif type(name) == list : raise ListTypeError(name)
    else : raise RemainTypeError(name)
    if len(name) < 4 :
        raise NameTooShort(name)
    elif len(name) > 20 :
        raise NameTooLong(name)
    elif name == "뀨뀨뀨뀨뀨" :
        raise NameTooCuteError(name)
    else :
        print("name : ", name)

try :
    validate(1234) 
except BaseValidationError as err  :
    raise err
except BaseTypeError as err :
    raise err
except Exception as e :
    raise e

 

이런식으로 각 처리에 대해서 정확히 명시할 수 있다는 장점?... 

728x90