예외
예외란, 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제.print(10/0)
ZeroDivisionError: division by zero
✅
try ~ except
예외를 처리할 때 쓰는 구문
n1 = 10; n2 = 0
try :
print(n1/n2)
except :
print('오류 발생! 다른데는 문제 없음') # 예외 처리
print(n1+n2)
print(n1-n2)
print(n1*n2)
오류 발생! 다른데는 문제 없음 10 10 0
✅
~else
예외가 발생하지 않은 경우 실행하는 구문
nums = []
n=1
while n<6 :
try :
a=int(input('숫자 적어주셈: '))
nums.append(a)
n += 1
except :
print('숫자 적으라고')
continue
else : # 예외가 발생하지 않으면 실행한다.
if a%2 ==0 :
print('짝수 입니다.')
else :
print('홀수 입니다.')
print(nums)
숫자 적어주셈: 2 짝수 입니다. 숫자 적어주셈: 7 홀수 입니다. 숫자 적어주셈: 싫어 숫자 적으라고 숫자 적어주셈: 3 홀수 입니다. 숫자 적어주셈: 132 짝수 입니다. 숫자 적어주셈: 4 짝수 입니다. [2, 7, 3, 132, 4]
✅
finally
예외 발생과 상관없이 항상 실행한다.
try :
inputData = input('정수를 입력해줘요 : ')
numInt = int(inputData)
except : # 오류일 때 실행
print('정수 뜻 모름?')
else : # 오류가 아닐 때 실행
if numInt % 2 == 0 :
print('짝수입니다.')
else :
print('홀수입니다.')
finally : # 오류 여부와 상관 없이 무조건 실행
print(f'input data : {inputData}')
시행 1
정수를 입력해줘요 : 싫어 정수 뜻 모름? input data : 싫어
시행 2
정수를 입력해줘요 : 2 짝수입니다. input data : 2
시행 3
정수를 입력해줘요 : 3 홀수입니다. input data : 3
Exception
클래스✅
Exception
예외 담당 클래스
a1 = 10; a2 = 0
try :
print(a1/a2)
except Exception as e :
print(f'에러 발생 : {e}')
에러 발생 : division by zero
✅
raise
raise
키워드를 이용하면 에러 상황을 설정 할 수 있다.
def divCal(n1, n2):
if n2 != 0:
print(f'{n1}/{n2}')
else :
raise Exception('0으로 나눌 수 없습니다.') # 예외 발생
num1 = int(input('분자 입력 : '))
num2 = int(input('분모 입력 : '))
try :
divCal(num1, num2)
except Exception as e :
print(f'Exception: {e}')
분자 입력 : 2 분모 입력 : 0 Exception: 0으로 나눌 수 없습니다.
class notusezero(Exception) : # 사용자 Exception 클래스
def __init__(self,n):
super().__init__(f'{n}은 사용할 수 없습니다.')
def divCal(n1,n2):
if n2 ==0 :
raise notusezero(n2)
else :
print(f'{n1/n2}')
num1 = int(input('분자: '))
num2 = int(input('분모: '))
try:
divCal(num1,num2)
except notusezero as e:
print(e)
분자: 3 분모: 0 0은 사용할 수 없습니다.