☕ 오늘의 주저리주저리
어제 퇴사기념 팀 회식을 하고왔다.
숙취와 함께하는 예외공부 스타또
문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제
#ZeroDivisionError
def div(n1,n2) :
print(n1/n2)
n1 = 10
n2 = 0
div(n1,n2) [어떠한 경우에도 0으로 나눌 수 없음]
#ValueError
print(int('hello')) [hello는 str으로 int로 형변환 할 수 없음]
#IndexError
list = [1,2,3]
print(list[3]) [3번째 오는 숫자 없음]
발생된 예외를 별도 처리함으로써
프로그램 전체의 실행에 문제가 없도록 함
try : [실행문] except : [error일때 실행문]
#예시1
n1=10
n2=0
try :
print(n1/n2) #[error가 아닐때만 실행]
except :
print('예상치 못한 예외가 발생했습니다.') #[error 일때만 실행]
print('다른 프로그램 실행에는 문제가 없습니다')
print(n1*n2) #0
print(n1+n2) #10
print(n1-n2) #10
#예시2
nums = []
n=1
while n < 6 :
try:
num = int(input('input number : '))
except :
print('예외발생') #[문자열이 들어왔을때 발생]
continue #[*continum : 다음실행문으로 넘어가세요]
nums.append(num) #[*append : nums에 num 값을 차례대로 붙혀주는함수]
n += 1
print(f'num : {nums}')
try : [실행문 ] except : [error일때 실행문] else : [error아닐때 실행문]
예시1.
nums = []
n=1
while n < 6 :
try :
num = int(input('input number : '))
except :
print('예외발생') #[문자열이 들어왔을 때 출력]
continue #[*continum : 다음실행문으로 넘어가세요]
else : #[오류가 아닐때 출력]
if num % 2 == 0 :
nums.append(num) #[*append : nums에 num 값을 차례대로 붙혀주는함수]
n += 1
else :
print('입력한 숫자는 홀수 입니다.',end='')
print('다시 입력하세요')
continue
print(nums)
예외발생과 상관없이 항상 실행하라
try :
input_data = input('input number : ')
num_int = int(input_data) #예외발생시점
except :
print('exception raise') #오류일 경우 출력문
print('not number !')
else : #오류가 아닐때 출력문
if num_int % 2 == 0 :
print('input data is even number')
else :
print('inpute data is odd number')
finally:
print(f'input_data : {input_data}') #try에서 input한 모든 데이터(error)도 출력
사용자로부터 숫자 5개를 입력받아
짝수, 홀수, 실수와 입력한 모든데이터를 각각 출력하는 프로그램
#사용자로부터 숫자 5개를 입력받아
#짝수, 홀수, 실수와 입력한 모든데이터를 각각 출력하는 프로그램
even_list = []
odd_list = []
float_list = []
all_list = []
n = 1
while n < 6:
try:
user_num = input('숫자입력 : ')
float_user_num = float(user_num)
except :
print('Exception raise')
continue
else :
if float_user_num - int(float_user_num) != 0 :
float_list.append(user_num)
else :
if float_user_num % 2 == 0 :
even_list.append(user_num)
else :
odd_list.append(user_num)
n += 1
continue
finally:
all_list.append(user_num)
print(f'전체입력 list : {all_list}')
print(f'실수입력 list : {float_list}')
print(f'짝수입력 list : {even_list}')
print(f'홀수입력 list : {odd_list}')
오류발생 원인 출력
except Exception as e:print(e) #오류발생이유
float_nums = []
even_nums = []
odd_nums = []
data_list = []
n = 1
while n < 6 :
try :
user_num = input('input number please : ')
input_data = float(user_num)
except Exception as e :
print('exception error raise\t',end='')
print('not number !!')
print(e) #안녕 입력 시 : could not convert string to float: '안녕'
continue
else :
if input_data - int(input_data) != 0 :
float_nums.append(input_data)
else :
if input_data % 2 == 0 :
even_nums.append(int(input_data))
else :
odd_nums.append(int(input_data))
n += 1
finally:
data_list.append(user_num)
print(float_nums)
print(even_nums)
print(odd_nums)
print(data_list)
반대로 예외를 발생시킴
raise Exception()
예외발생시 ()출력
def div_calculaotr (n1,n2) :
if n2 != 0 :
print(n1/n2)
else :
raise Exception('0으로 나눌 수 없습니다.') #예외발생 raise Exception
n1 = int(input('input n1 : '))
n2 = int(input('input n2 : '))
print(div_calculaotr(n1,n2))
def sms (msg) :
if len(msg) > 10 :
raise Exception('길이초과 mms발생')
else :
print('sms 발송 완료')
try :
msg = input('메세지를 입력하세요')
except Exception as e :
print()
내가 만드는 예외 클래스
Exception 클래스(예외클래스)를 상속하자
class not_use (Exception) : #Exception class상속
def __init__(self,n):
super().__init__(f'{n}은 사용할 수 없습니다.')
def div_calculator(num1,num2) :
if num2 == 0:
raise not_use(num2) #내가 만든 예외클래스 실행
else :
print(f'{num1} / {num2} = {num1/num2}')
num1 = int(input('num1 입력 : '))
num2 = int(input('num2 입력 : '))
#div_calculator(num1,num2) #바로 사용할 경우 오류문구가 뜨므로 try에 묶을것
try :
div_calculator(num1,num2)
except not_use as e :
print(e)
super().__init__(f'{n}은 사용할 수 없습니다.')
super는 상위클래스를 상속하고 하위클래스에서 상위클래스를 실행할 때 다음과 같이사용한다.
super().__init__(self,매개변수)
❓ 하지만, 사용자함수에서 Exception클래스를 상속할 때 출력값을 적는데 이유가 무엇을까 ?
❗Exception 클래스는 init메소드에서 해단 익셉션 발생 시 어떤 메세지를 보여줄 지 입력받는다. 즉, 출력값이 아니라 Exception 객체를 초기화하기 위해 필요한 입력을 넣어준것.
단지 예외가 발생했을 때 해당 내용이 콘솔에 출력되게 하는 것이 Exception 클래스의 기능이기 때문에 출력을 써 준 것 처럼 보이는 것일 뿐.