2023. 3. 15. 16:21ㆍ카테고리 없음
# 28강 예외란?
예상하지 못한 문제로 프로그램이 실행이 어려운 상태 (error)
▶ 예외란, 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제이다.
< 예외 종류 >
▶ 예외 관련 클래스는 Exception 클래스를 상속한다.
#29강. 예외처리
발생된 예외를 별도로 처리함으로써 프로그램 전체의 실행에 문제가 없도록 함.
▶ 예외 발생 예상 구문을 try~ except 로 감싼다
Q) 사용자로부터 숫자 5개를 입력받을 때 숫자가 아닌 자료형이 입력되면 예외처리 하는 프로그램을 만들어보자.
nums = []
n= 1
while n<6:
try:
num = int(input('input number: '))
except:
print('예외 발생')
continue
nums.append(num)
n += 1
print(f'nums : {nums}')
# 30강. try~except ~ else
~else : 예외가 발생하지 않은 경우에 실행하는 구문
nums = []
n = 1
while n < 6:
try:
num = int(input('input number:')) # try~
except: # 예외(오류)일경우
print('예외 발생')
continue
else: # 예외가 발생하지 않은 경우
if num % 2 ==0:
nums.append(num)
n+=1
else:
print('홀수입니다.', end='')
print('다시입력하세요')
continue
print(f'nums: {nums}')
▶ Q) 사용자로부터 숫자 5개를 입력받아 짝수, 홀수, 실수로 구분해서 각각을 리스트에 저장하는 프로그램을 만들어보자.
even_list = []; odd_list=[]; float_list=[]
n = 1
while n < 6:
try:
num = float(input('input number: '))
except:
print(' exception raise!!')
print(' input number again')
continue
else:
if num - int(num)!= 0:
print('float number')
float_list.append(num)
else:
if num % 2 == 0:
print('even number')
even_list.append(int(num))
else:
print('odd number')
odd_list.append(int(num))
n += 1
print(f'even_list: {even_list}')
print(f'odd_list: {odd_list}')
print(f'float_list: {float_list}')
#31강. finally : 예외 발생과 상관없이 항상 실행한다.
▶ 사용자로부터 숫자 5개를 입력받아 짝수, 홀수, 실수와 입력한 모든 데이터를 각각 출력하는 프로그램을 만들어보자.
even_list = []; odd_list=[]; float_list=[]; data_list = []
n = 1
while n < 6:
try:
data = input('input number: ')
float_num = float(data)
except:
print(' exception raise!!')
print(' not number !!')
continue
else:
if float_num - int(float_num) != 0:
print('float number')
float_list.append(float_num)
else:
if float_num % 2 == 0:
print('even number')
even_list.append(float_num)
else:
print('odd number')
odd_list.append(float_num)
n += 1
finally:
data_list.append(data)
print(f'even_list: {even_list}')
print(f'odd_list: {odd_list}')
print(f'float_list: {float_list}')
print(f'data_list: {data_list}')
# 32강. Exception 클래스
Exception 은 예외를 담당하는 클래스이다.
▶ raise 키워드를 이용하면 예외를 발생시킬 수 있다.
def divCalculator(n1,n2):
if n2 != 0:
print(f'{n1}/{n2} = {n1/n2}')
else:
raise Exception('0으로 나눌 수 없습니다.')
num1 = int(input('input number 1: '))
num2 = int(input('input number 2: '))
try:
divCalculator(num1,num2)
except Exception as e:
print(f'Exception : {e}')
▶ 사용자가 문자 메세지를 보낼 때 10글자 이하면 sms로 발생하고, 10글자를 초과하면 mms로 발송하는 프로그램을 예외 처리를 이용해서 만들어보자
def send_SMS(msg):
if len(msg) > 10:
raise Exception('길이 초과!! MMS 전환 후 발송!!',1 )
else:
print('SMS 발송!!')
def send_MMS(msg):
if len(msg) <= 10:
raise Exception('길이 미달!! SMS 전환 후 발송!!, 2')
else:
print('MMS 발송!!')
msg = input('input message : ')
try:
send_SMS(msg)
except Exception as e:
print(f'e: {e.args[0]}')
print(f'e: {e.args[1]}')
if e.args[1] == 1:
send_MMS(msg)
elif e.args[1] == 2:
send_SMS(msg)
# 33강. 사용자 예외 클래스
예외클래스를 직접 만들어보자!!
▶ Exception 클래스를 상속해서 사용자 예외 클래스를 만들 수 있다.
class Not_Use_Zero_Exception(Exception):
def __init__(self, n):
super().__init__(f'{n}은(는) 사용할 수 없습니다.')
def div_Calculator(n1,n2):
if n2 == 0:
raise Not_Use_Zero_Exception(n2)
else:
print(f'{n1}/{n2}={n1 / n2}')
num1 = int(input('input number1: '))
num2 = int(input('input number2: '))
try:
div_Calculator(num1,num2)
except Not_Use_Zero_Exception as e:
print(e)
▶ Q) 관리자 암호를 입력하고 다음 상태에 따라 예외처리하는 예외 클래스를 만들어 보자
암호길이가 5미만인 경우 / 암호 길이가 10을 초과하는 경우 / 암호가 잘못된 경우
class PasswordLength_Short_Exception(Exception):
def __init__(self,str):
super().__init__(f'{str}: 길이 5미만!!')
class PasswordLength_Long_Exception(Exception):
def __init__(self,str):
super().__init__(f'{str}: 길이 10 초과!!')
class Password_Wrong_Exception(Exception):
def __init__(self,str):
super().__init__(f'{str}: 잘못된 비밀번호')
adminPW = input('input admin password : ')
try:
if len(adminPW) <5 :
raise PasswordLength_Short_Exception(adminPW)
elif len(adminPW) > 10:
raise PasswordLength_Long_Exception(adminPW)
elif adminPW != 'admin1234':
raise Password_Wrong_Exception(adminPW)
elif adminPW == 'admin1234':
print('빙고!!')
except PasswordLength_Short_Exception as e1:
print(e1)
except PasswordLength_Long_Exception as e2:
print(e2)
except Password_Wrong_Exception as e3:
print(e3)