예외란, 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제이다.
예외 종류
- 예외 관련 클래스는 Exception 클래스를 상속한다.

def add(n1, n2):
print(n1 + n2)
def div(n1, n2):
print(n1 / n2)
fn = int(input('first number :'))
sn = int(input('last number :'))
# first number :10
# last number :0
add(fn, sn)
↓
10
div(fn, sn)
↓
ZeroDivisionError: division by zero <= error
예상하지 못한 예외가 프로그램 전체 실행에 영향이 없도록 처리함

예외 발생 예상 구문을 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
nums = []
n = 0
while n < 5 :
try:
getNum = int(input('숫자를 입력하세요 :'))
except:
print('입력 오류, 다시 입력하세요.')
continue
nums.append(getNum)
n += 1
print(f'input number : {nums}')
↓
숫자를 입력하세요 :1
숫자를 입력하세요 :d
입력 오류
숫자를 입력하세요 :2
숫자를 입력하세요 :6
숫자를 입력하세요 :10
숫자를 입력하세요 :w
입력 오류
숫자를 입력하세요 :11
input number : [1, 2, 6, 10, 11]
evenList = []; oddList = []; floatList = []
n = 0
while n < 5:
try:
getNum = float(input('숫자를 입력하세요(실수 가능) :'))
except:
print('입력 오류(예외 발생)')
continue
else:
intNum = int(getNum)
if getNum - intNum != 0 :
floatList.append(getNum)
elif getNum % 2 == 0 :
evenList.append(intNum)
else:
oddList.append(intNum)
n += 1
print(floatList)
print(evenList)
print(oddList)
↓
숫자를 입력하세요(실수 가능) :2.1
숫자를 입력하세요(실수 가능) :w
입력 오류(예외 발생)
숫자를 입력하세요(실수 가능) :3
숫자를 입력하세요(실수 가능) :2
숫자를 입력하세요(실수 가능) :6
숫자를 입력하세요(실수 가능) :5
[2.1]
[2, 6]
[3, 5]
oddList = []; evenList = []; floatList = []; dataList = []
n = 0
while n < 5 :
try:
getNum = input('숫자를 입력하세요(실수 가능) :')
floatNum = float(getNum)
intNum = int(floatNum)
except :
print('오류(예외 발생)')
continue
else:
if floatNum - intNum != 0 :
floatList.append(floatNum)
elif intNum % 2 == 0 :
evenList.append(intNum)
else:
oddList.append(intNum)
finally:
dataList.append(getNum)
n += 1
def printList() :
print(f'oddList : {oddList}')
print(f'evenList : {evenList}')
print(f'floatList : {floatList}')
print(f'dataList : {dataList}')
print(f'getNum type : {type(getNum)}')
print(f'floatNum type : {type(floatNum)}')
print(f'intNum type : {type(intNum)}')
printList()
↓
숫자를 입력하세요(실수 가능) :a
오류(예외 발생)
숫자를 입력하세요(실수 가능) :abcd
오류(예외 발생)
숫자를 입력하세요(실수 가능) :1
숫자를 입력하세요(실수 가능) :2
숫자를 입력하세요(실수 가능) :3
숫자를 입력하세요(실수 가능) :2.11
숫자를 입력하세요(실수 가능) :5
oddList : [1, 3, 5]
evenList : [2]
floatList : [2.11]
dataList : ['a', 'abcd', '1', '2', '3', '2.11', '5']
getNum type : <class 'str'>
floatNum type : <class 'float'>
intNum type : <class 'int'>
num1 = int(input('숫자 입력 :'))
num2 = int(input('숫자 입력 :'))
def cal() :
try:
print(f'나누기 : {num1 / num2}')
except Exception as e:
print(f'exception : {e}')
print('계산 오류')
print(f'더하기 : {num1 + num2}')
print(f'곱하기 : {num1 * num2}')
cal()
↓
숫자 입력 :10
숫자 입력 :0
exception : division by zero
계산 오류
더하기 : 10
곱하기 : 0
def sendSMS(msg):
if len(msg) > 10 :
raise Exception('10글자를 초과하여 MMS로 전환하여 전송합니다.', 1)
else:
print('SMS 발송 완료.')
def sendMMS(msg):
if len(msg) <= 10 :
raise Exception('10글자 이하로 SMS로 전환하여 전송합니다.', 2)
else:
print('MMS 발송 완료.')
msg = input('문자를 입력하세요. : ')
try:
sendSMS(msg)
except Exception as e:
print(f'Exception: {e.args[0]}')
print(f'Exception: {e.args[1]}')
if e.args[1] == 1 :
sendMMS(msg)
elif e.args[1] == 2 :
sendSMS(msg)
↓
문자를 입력하세요. : mms 문자를 발송하기 위해 10글자 이상 작성
Exception: 10글자를 초과하여 MMS로 전환하여 전송합니다.
Exception: 1
MMS 발송 완료.
↓
문자를 입력하세요. : 10글자 이하
SMS 발송 완료.
class NotUseException(Exception):
def __init__(self, num):
super().__init__(f'{num} 은(는) 사용할 수 없습니다.')
def cal(num1, num2) :
if num2 == 0 :
raise NotUseException(num2)
else:
print(f'{num1} / {num2} = {num1 / num2}')
n1 = int(input('first num :'))
n2 = int(input('last num :'))
try:
cal(n1, n2)
except NotUseException as e :
print(f'e : {e}')
↓
first num :10
last num :2
10 / 2 = 5.0
↓
first num :10
last num :0
e : 0 은(는) 사용할 수 없습니다.
class PasswordLengthShortException(Exception) :
def __init__(self, n):
super().__init__(f'{n} : 길이 5 미만')
class PasswordLengthLongException(Exception):
def __init__(self, n):
super().__init__(f'{n} : 길이 10 초과')
class PasswordWrongException(Exception):
def __init__(self, n):
super().__init__(f'{n} : 잘못된 비밀번호입니다.')
def getPassword(pw) :
pwLen = len(pw)
if pwLen < 5 :
raise PasswordLengthShortException(pw)
elif pwLen > 10 :
raise PasswordLengthLongException(pw)
elif pw != 'admin1234' :
raise PasswordWrongException(pw)
elif pw == 'admin1234' :
print(f'비밀번호 : {pw}')
print('비밀번호 입력 완료')
pw = input('비밀번호를 입력하세요. : ')
try:
getPassword(pw)
except PasswordLengthShortException as e1 :
print(e1)
except PasswordLengthLongException as e2 :
print(e2)
except PasswordWrongException as e3 :
print(e3)
↓
비밀번호를 입력하세요. : 1234
1234 : 길이 5 미만
↓
비밀번호를 입력하세요. : 123456789
123456789 : 잘못된 비밀번호입니다.
↓
비밀번호를 입력하세요. : sllekfms120340
sllekfms120340 : 길이 10 초과
↓
비밀번호를 입력하세요. : admin1234
비밀번호 : admin1234
비밀번호 입력 완료
📢 오늘의 한마디
초급 강의를 통해 헷갈렸던 부분을 다시 짚어 가면서
중급 강의를 통해 파이썬 기초를 다지는 중이다..
요 며칠 실습을 집중으로 여러가지 코드들을 혼자 짜보면서 공부하느라
중급 강의 진도가 더뎠지만 지식을 쌓는 데에는 큰 도움이 된 것 같다.
앞으로도 속도 보다는 제대로 된 지식을 쌓는데 집중해야지..