AboutPython

[파이썬] 사용자 예외 클래스 만들기

scone 2022. 5. 5. 20:05

[사용자 예외 클래스]

  • Exception 클래스를 상속해서 사용자 예외 클래스를 만들 수 있다.
class NotUseZeroException(Exception):
    def __init__(self, n):
        super().__init__(f'{n}은 사용할 수 없습니다.')

def div(n1,n2):
    if n2 == 0 :
        raise NotUseZeroException(n2)
    print(f'n1/n2 = {n1/n2}')

num1 = int(input('숫자 1 : '))
num2 = int(input('숫자 2 : '))

try : 
    div(num1,num2)
except NotUseZeroException as z :
    print(f'Exception : {z}')
'''
숫자 1 : 12
숫자 2 : 0
Exception : 0은 사용할 수 없습니다.
'''

[실습] 비밀번호를 만들 때, 특정 조건을 만족하겠끔 하는 예외 클래스를 만들어보자.

  • PasswordLengthShortException : 길이가 5 미만
    PasswordLengthLongException : 길이가 10 초과
    PasswordWrongException : 영어 또는 숫자로만 이루어진 패스워드인 경우
    str.isalpha(), str.isdigit() : 이 문자가 알파벳인지, 이 문자가 숫자인지 확인해주는 문자열을 객체로 하는 함수.
class PasswordLengthShortException(Exception) :
    def __init__(self,password):
        super().__init__(f'{password}는 길이가 5 미만 입니다.')
class PasswordLengthLongException(Exception) :
    def __init__(self,password):
        super().__init__(f'{password}는 길이가 10 초과 입니다.')
class PasswordWrongException(Exception) :
    def __init__(self,password):
        super().__init__(f'{password}는 잘못된 패스워드 입니다.')
def check_password(password):
    if len(password)<5:
        raise PasswordLengthShortException(password)
    elif len(password)>10:
        raise PasswordLengthLongException(password)
    elif password.isalpha() or password.isdigit():
        raise PasswordWrongException(password)
    return True

while True:
    password = input('input admin password : ')
    try :
        check_password(password)
    except Exception as e :
        print(f'Exception : {e}')
    else :
        print('패스워드가 입력되었습니다.') 
        break
'''
input admin password : 123
Exception : 123는 길이가 5 미만 입니다.
input admin password : 12345
Exception : 12345는 잘못된 패스워드 입니다.
input admin password : 1234567891011
Exception : 1234567891011는 길이가 10 초과 입니다.
input admin password : abc
Exception : abc는 길이가 5 미만 입니다.
input admin password : abcdef
Exception : abcdef는 잘못된 패스워드 입니다.
input admin password : admin123
패스워드가 입력되었습니다.
'''

 

1. 사용자 예외함수를 만들어 준 후

2. password를 양식에 맞게 썼는지, 만약 틀렸다면 에러를 발생시키는 함수를 만들어준다.

3. 사용자에게 암호를 입력시키고 (try)

4. 에러가 발생된다면, 어떠한 에러인지 프린트 해주고

5. 양식에 맞는 비밀번호를 적을 때 까지 반복시킨다.

6. 양식에 맞게 잘 썼다면 else구문을 실행시킨다. (break)

 


  • 다음과 같이 exception을 여러번 쓸 수도 있다는거.
class PasswordLengthShortException(Exception) :
    def __init__(self,password):
        super().__init__(f'{password}는 길이가 5 미만 입니다.')
class PasswordLengthLongException(Exception) :
    def __init__(self,password):
        super().__init__(f'{password}는 길이가 10 초과 입니다.')
class PasswordWrongException(Exception) :
    def __init__(self,password):
        super().__init__(f'{password}는 잘못된 패스워드 입니다.')

def check_password(password):
    try :
        if len(password)<5:
            raise PasswordLengthShortException(password)
        elif len(password)>10:
            raise PasswordLengthLongException(password)
        elif password.isalpha() or password.isdigit():
            raise PasswordWrongException(password)

    except PasswordLengthShortException as e :
        print(e)
    except PasswordLengthLongException as e :
        print(e)
    except PasswordWrongException as e :
        print(e)

    else:
        print('패스워드가 입력되었습니다.')
        return True

flag = False
while flag != True :
    password = input('input admin password : ')
    flag = check_password(password)