안녕하세요.
오늘은 간단하게 예외처리(try, except) 문법을 이용해서 간단한 예제를 만들어보았습니다.
개념공부만 하는 것보다는 직접 해봐야 머리 속에 잘 들어오더라구요!
그래서 이런 예외 처리를 실무에서는 어떻게 사용할지 한번 생각해보고 간단하게 구현해봤습니다.
(물론 실무에서는 이렇게 사용하지 않겠죠..?)
제가 생각해본 예제의 목표는 다음과 같습니다.
- 아이디를 만들기 위해 input 값을 사용자로부터 받을 것
- 대문자가 포함된 아이디는 에러를 발생시킬 것
- 특수문자가 포함된 아이디는 에러를 발생시킬 것
- 사용 가능한 아이디를 입력할때까지 자동 반복될 것
그럼 시작해볼까요!!
먼저 사용자 정의 에러 클래스를 만들었습니다.
처음부터 모든 코드를 작성하는 방법보다, 기존 클래스를 상속받아 함수를 수정하는게 훨씬 쉽습니다.
따라서 Exception 클래스를 상속받는 클래스를 간단하게 생성해줍니다.
# 대문자가 포함되어있을때의 에러 클래스
class CapitalError(Exception):
def __init__(self):
super().__init__("Warning : Don't use capital letter!!")
# 특수문자가 포함되어있을때의 에러 클래스
class SpecialCharError(Exception):
def __init__(self):
super().__init__("Warning : Don't use special character!!")
그리고 ID에 대문자, 특수문자가 있는지 확인하는 코드가 필요합니다.
이 함수는 try 구문에 들어갈 예정이고,
해당 조건에 만족하지 않으면 raise를 통해 에러 클래스를 일부러 발생시킵니다.
def SignIn(id_value):
if id_value.islower() == False: # 모두 소문자가 아니면 에러
raise CapitalError
elif any([x in id_value for x in '!@#$%^&*']) == True: # 특수문자가 하나라도 들어가있으면 에러
raise SpecialCharError
else:
print("{0} is available".format(id_value)) # 그 외에는 사용가능함
마지막으로 try와 except를 이용하여 예외처리를 해줍니다.
간단한 원리만 설명드리자면 SignIn 이라는 함수를 try 했을때 raise 를 만나 에러가 발생하면 해당 에러 문구를 출력하고 다시 입력을 받아야 합니다.
따라서 while 과 break를 이용해서 무한루프를 만들어주고, 그 안에 예외 처리 구문을 만들어줍니다.
while True:
try:
id_value = input("Enter the ID : ")
SignIn(id_value)
except CapitalError as e: # 에러메세지를 확인하고 싶으면 as 사용
print(e)
print("---------- Please retry ----------")
except SpecialCharError as s:
print(s)
print("---------- Please retry ----------")
else:
break
finally:
print(" ")
마지막 finally 의 경우에는 try 에서 에러가 발생하든, 하지 않든 수행되는 구문입니다.
보통 try 에서 f.open 을 하는 경우에 finally 에서 f.close 를 사용한다고 하는데,
저는 매 시도마다 한 줄씩 띄워주도록 print 문을 삽입했습니다.
(굳이 사용하지 않아도 되지만,, 한 번 써보고 싶어서 넣어봤습니다)
아래는 전체 코드와 결과창입니다.
특수문자와 대문자를 모두 없애니 성공적으로 사용가능한 ID를 확인했습니다.
class CapitalError(Exception):
def __init__(self):
super().__init__("Warning : Don't use capital letter!!")
class SpecialCharError(Exception):
def __init__(self):
super().__init__("Warning : Don't use special character!!")
def SignIn(id_value):
if id_value.islower() == False:
raise CapitalError
elif any([x in id_value for x in '!@#$%^&*']) == True:
raise SpecialCharError
else:
print("{0} is available".format(id_value))
while True:
try:
id_value = input("Enter the ID : ")
SignIn(id_value)
except CapitalError as e: # 에러메세지를 확인하고 싶으면 as 사용
print(e)
print("---------- Please retry ----------")
except SpecialCharError as s:
print(s)
print("---------- Please retry ----------")
else:
break
finally:
print(" ")
'Study doc. > Python' 카테고리의 다른 글
[Python] 모듈 사용법, pip의 원리 (0) | 2020.09.22 |
---|---|
[Python] 파이썬 클래스, 이거 한 번만 읽어봐! (0) | 2020.09.18 |
[Python] os, pathlib, pickle 더 이상 모르는척 하지 말자 (0) | 2020.09.11 |
[Python] 알고 써라!! 판다스(Pandas) (1) | 2020.07.23 |
[Python] 알고 써라!! 넘파이(Numpy) (0) | 2020.07.21 |