예외란, 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제
def add(n1, n2):
print(n1 + n2)
def sub(n1, n2):
print(n1 - n2)
def mul(n1, n2):
print(n1 * n2)
def div(n1, n2):
print(n1 / n2)
def calculator(n1, n2):
add(n1, n2)
sub(n1, n2)
mul(n1, n2)
div(n1, n2)
calculator(10, 0)
📌결과
❗ZeroDivisionError: division by zero
예상하지 못한 예외가 프로그램 전체 실행에 영향이 없고록 처리함
예외 발생 구문을 try ~ except로 감싼다.
def calculator(n1, n2):
try:
add(n1, n2)
sub(n1, n2)
mul(n1, n2)
div(n1, n2)
except:
print('예상 하지 못한 예외 발생')
📌결과
10
10
0
예상 하지 못한 예외 발생
nums = []
while True:
if len(nums) == 5:
break
try:
nums.append(int(input('숫자 입력 : ')))
except:
print('숫자를 입력하세요')
print(nums)
📌결과
숫자 입력 : 1
숫자 입력 : hihihi
숫자를 입력하세요
숫자 입력 : 2
숫자 입력 : 안녕
숫자를 입력하세요
숫자 입력 : 1231
숫자 입력 : 21
숫자 입력 : ㄷ
숫자를 입력하세요
숫자 입력 : 4
[1, 2, 1231, 21, 4]
else : 예외가 발생하지 않은 경우 실행하는 구문
nums = []
n = 1
while n < 6:
try:
num = int(input('슷자 입력 : '))
except:
print('예외발생!!')
continue
else:
if num % 2 == 0:
nums.append(num)
n += 1
else:
print('홀수입니다.', end='')
print('다시 입력하세요')
continue
print(nums)
📌결과
슷자 입력 : 10
슷자 입력 : 5
홀수입니다.다시 입력하세요
슷자 입력 : 3
홀수입니다.다시 입력하세요
슷자 입력 : 8
슷자 입력 : 4
슷자 입력 : 하하
예외발생!!
슷자 입력 : 2
슷자 입력 : 6
[10, 8, 4, 2, 6]
nums = []
evenList = []
oddList = []
floatList = []
while True:
if len(nums) > 5:
break
try:
nums.append(float(input('input number : ')))
except:
print('exception raise!')
else:
n = nums[len(nums) - 1]
if not n.is_integer():
floatList.append(n)
elif n % 2 == 0:
evenList.append(n)
else:
oddList.append(n)
print(f'numsLit : {nums}')
print(f'evenList : {evenList}')
print(f'oddList : {oddList}')
print(f'floatList : {floatList}')
📌결과
input number : 0
input number : 1
input number : 5
input number : 실수
exception raise!
input number : float
exception raise!
input number : 14.5
input number : 13.5
input number : 8
numsLit : [0.0, 1.0, 5.0, 14.5, 13.5, 8.0]
evenList : [0.0, 8.0]
oddList : [1.0, 5.0]
floatList : [14.5, 13.5]
예외 발생과 상관없이 항상 실행한다
try:
inputData = input('input number : ')
numInt = int(inputData)
except:
print('exception raise!!')
print('not number')
else:
if numInt % 2 == 0:
print('even number!')
else:
print('odd number!')
finally:
print(f'inputData : {inputData}')
📌결과
input number : float
exception raise!!
not number
inputData : float
n = 0
dataList = []
evenList = []
oddList = []
floatList = []
while True:
if n == 5:
break
try:
data = input('input number : ')
inputNumber = float(data)
except:
print('exception raise!')
continue
else:
n += 1
if not inputNumber.is_integer():
floatList.append(inputNumber)
elif inputNumber % 2 == 0:
evenList.append(int(inputNumber))
else:
oddList.append(int(inputNumber))
finally:
dataList.append(data)
print(f'dataList : {dataList}')
print(f'evenList : {evenList}')
print(f'oddList : {oddList}')
print(f'floatList : {floatList}')
📌결과
input number : 5
input number : number
exception raise!
input number : 13
input number : 17.5
input number : 8
input number : 10
dataList : ['5', 'number', '13', '17.5', '8', '10']
evenList : [8, 10]
oddList : [5, 13]
floatList : [17.5]
num1 = int(input('input number1 : '))
num2 = int(input('input number2 : '))
try:
print(f'num1 / num2 ={num1 / num2}')
except Exception as e:
print('0으로 나눌 수 없습니다.')
print(f'Exception : {e}')
print(f'num1 * num2 = {num1 * num2}')
print(f'num1 + num2 = {num1 + num2}')
print(f'num1 - num2 = {num1 - num2}')
📌결과
input number1 : 5
input number2 : 0
0으로 나눌 수 없습니다.
Exception : division by zero
num1 * num2 = 0
num1 + num2 = 5
num1 - num2 = 5
def divCalaulator(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:
divCalaulator(num1, num2)
except Exception as e:
print(e)
📌결과
input number1 : 10
input number2 : 0
0으로 나눌 수 없습니다.
def sendMessage(message):
if len(message) <= 10:
raise Exception(f'10글자 이하 SMS 전환 후 발송 : {message}', 1)
else:
raise Exception(f'10글자 초과 MMS 전환 후 발송 : {message}', 2)
message = input('message : ')
try:
sendMessage(message)
except Exception as e:
print(e.args[0], " ", e.args[1])
📌결과
message : Hello World!
10글자 초과 MMS 전환 후 발송 : Hello World! 2
Exception 클래스를 상속해서 사용자 예외 클래스를 만들 수 있다.
def divCalculator(n1, n2):
if n2 == 0:
raise NotUserException(n2)
else:
print(f'{n1} / {n2} = {n1 / n2}')
num1 = int(input('num1 : '))
num2 = int(input('num2 : '))
try:
divCalculator(num1, num2)
except Exception as e:
print(e)
📌결과
num1 : 4
num2 : 0
0은(는) 사용할 수 없습니다.