1. 예외
◾ 예외 : 문법적인 문제는 없으나 실행 중 바생하는 문제(ex. 0으로 나누셈 진행시, ZeroDivisionError)
◾ 예외 관련 클래스는 Exception 클래스를 상속

2. 예외처리
◾ 예외 처리 : 예상하지 못한 예외가 프로그램 전체에 영향이 없도록 처리
1) try ~ except 구문
◾try ~ except 구문을 이용하여 예외 발생 처리
◾ 정확하게 예의가 발생할 것으로 예상되는 부분에 사용
n1 = 10; n2=0
try:
print(n1/n2)
except:
print('예상치 못한 문제가 발생했습니다.')
print('다음 프로그램이 정상 실행 됩니다.')
print(n1*n2)
print(n1-n2)
print(n1+n2)
----------------------------------------------------------------
예상치 못한 문제가 발생했습니다.
다음 프로그램이 정상 실행 됩니다.
0
10
10
2) try ~ except ~ else 구문
◾~ else : 예외가 발생하지 않은 경우 실행하는 구문
◾ else는 try~ except 구문을 사용했을때 이용 가능
nums = []
n = 1
while n < 4:
try:
num = int(input('숫자 입력 : '))
except:
print('예외 발생!!')
continue
if num % 2 == 0:
nums.append(num)
n += 1
else:
print('홀수 입니다.', end='')
print('다시 입력하세요')
continue
print(f'nums = {nums}')
-------------------------------------------
숫자 입력 : 가나다
예외 발생!!
숫자 입력 : 2
숫자 입력 : 1
홀수 입니다.다시 입력하세요
숫자 입력 : 4
숫자 입력 : 6
nums = [2, 4, 6]
3) finally
◾예외 발생과 상관없이 항상 실행
try:
inputData = input('숫자(정수) : ')
numInt = int(inputData)
except:
print('에러발생')
else:
if numInt % 2 == 0:
print('짝수')
else:
print('홀수')
finally:
print(f'{inputData}')
-------------------------------------------
숫자(정수) : 가다나
에러발생
가다나
3. Exception 클래스
◾ 프로그래밍에서 오류 또는 예외 상황을 나타내는 클래스
try:
result = 10 / 0
except Exception as e:
print(f'Exception : {e}')
----------------------------------------------------------------
Exception : division by zero
1) raise 키워드
◾raise 키워드를 이용하여 예외 발생 가능
def diviCalculator(n1, n2):
if n2 != 0:
print(f'{n1} / {n2} = {n1/n2}')
else:
raise Exception('0으로 나눌 수 없습니다.')
num1 = int(input('input number1 : '))
num2 = int(input('input number2 : '))
try:
diviCalculator(num1, num2)
except Exception as e:
print(f'Exception = {e}')
----------------------------------------------------------------
input number1 : 10
input number2 : 0
Exception = 0으로 나눌 수 없습니다.
2) 사용자 예외 클래스
◾Exception 클래스를 상속해서 사용자 예외 클래스 생성 가능
◾ 특정 상황에 대한 예외를 더 잘 표현하고 관리 가능
class NotUseZeroException(Exception):
def __init__(self,n):
super().__init__(f'{n}은(는) 사용할 수 없습니다.')
def divCalculator(n1, n2):
if n2 == 0:
raise NotUseZeroException(n2)
else:
print(f'n1 / n2 = {n1/n2}')
inputNum1 = int(input('input number1 : '))
inputNum2 = int(input('input number2 : '))
try:
divCalculator(inputNum1, inputNum2)
except NotUseZeroException as e:
print(f'exception error : {e}')
----------------------------------------------------------------
input number1 : 10
input number2 : 0
exception error : 0은(는) 사용할 수 없습니다.