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)