-예외처리
발생된 예외를 별도 처리함으로써 프로그램 전체의 실행에 문제가 없도록 함.
프로그램 실행1
프로그램 실행2
프로그램 실행3 → 예외 발생!! → 발생한 예외에 대해서 별도 처리함.
프로그램 실행4
프로그램 실행5
try ~ except
예외 발생 예상 구문을 try ~ except로 감싼다.
n1 = 10; n2 = 0
try:
print(n1 / n2) # n2가 0인 경우 문제 발생
except:
print('예상치 못한 문제가 발생했습니다.')
print('다음 프로그램이 정상 실행됩니다.')
print(n1 * n2)
print(n1 - n2)
print(n1 + n2)
-실습
사용자로부터 숫자 5개를 입력받을 때 숫자가 아닌 자료형이 입력되면 예외 처리하는 프로그램을 만들어보자.
nums = []
n = 1
while n < 6:
try:
num = int(input('input number : '))
except:
print('예외 발생!!')
continue # 숫자가 5개 채워질 때까지 반복되야 하므로!
nums.append(num)
n += 1
print(f'nums : {nums}')
- try ~ except ~ else
예외가 발생하지 않은 경우에 실행하는 구문! → else에다가!
else는 꼭 try ~ except를 사용했을 때 사용할 수 있다!
- ~ else
예외가 발생하지 않은 경우 실행하는 구문이다.
nums = []
n = 1
while n < 6:
try:
num = int(input('input number : '))
except:
print('예외 발생!!')
continue
else:
if num % 2 == 0:
nums.append(num)
n += 1
else:
print('홀수 입니다.', end = '')
print('다시 입력 하세요.')
continue
print(f'nums : {nums}')
- 실습
사용자로부터 숫자 5개를 입력받아 짝수, 홀수, 실수로 구분해서 각각을 리스트에 저장하는 프로그램을 만들어보자.- 군집에서 구분할 때 자주 사용되는 코드이다!
eveList = []; oddList = []; floatList = []
n = 1
while n < 6:
try: # 문자 입력 받았을 때 예외 대비
num = float(input('input number : '))
except:
print('exception raise!!')
print('input number again!!')
continue
else:
if num - int(num) != 0: # 실수를 구분하는 코드
print('float number!')
floatList.append(num)
else:
if num % 2 == 0:
print('even number!')
eveList.append(num)
else:
print('odd number!')
oddList.append(num)
n += 1
print(f'eveList : {eveList}')
print(f'oddList : {oddList}')
print(f'floatList : {floatList}')
- finally
예외 발생과 상관없이 항상 실행한다.
네트워크를 통해 외부 자원으로 코딩을 할 때 외부자원 연결을 끊어야 할 때 주로 사용
try:
inputData = input('input number : ')
numInt = int(inputData) # 문자가 들어오면 정수화 불가하므로 예외 처리
except:
print('exception raise!!')
print('not number!!')
else:
if numInt % 2 == 0:
print('inputData is even number!!')
else:
print('inputData is odd number!!')
finally: # 예외 발생, 예외 미발생 모두 입력 받은 데이터를 출력 해준다!
print(f'inputData : {inputData}')
- 실습
사용자로부터 숫자 5개를 입력받아 짝수, 홀수, 실수와 입력한 모든 데이터를 각각 출력하는 프로그램을 만들어보자.
evenList = []; oddList = []; floatList = []; dataList = []
n = 1
while n < 6:
try:
data = input('input number : ')
floatNum = float(data)
except:
print('exception raise!!')
print('not number!!')
continue # n이 카운트 되면 안됨
else:
if floatNum - int(floatNum) != 0:
print('float number!!')
floatList.append(floatNum)
else:
if floatNum % 2 == 0:
print('even number!!')
evenList.append(int(floatNum))
else:
print('odd number!!')
oddList.append(int(floatNum))
n += 1
finally:
dataList.append(data)
print(f'evenList : {evenList}')
print(f'oddList : {oddList}')
print(f'floatList : {floatList}')
print(f'dataList : {dataList}')
- Exception 클래스
Exception은 예외를 담당하는 클래스이다.
예외 담당 클래스 Exception
- raise 키워드를 이용하면 예외를 발생시킬 수 있다.
num1 = int(input('input number1 : '))
num2 = int(input('input number2 : '))
try:
print(f'num1 / num2 = {num1 / num2}') # 0으로 나눌 경우 예외
# except:
# print('0으로 나눌 수 없습니다.') # 결과로 볼 때는 어떤 오류인지는 알 수 가 없다
# ▼
except Exception as e: # Exception 클래스로 어떤 오류인지도 출력
print('0으로 나눌 수 없습니다.')
print(f'excetion : {e}')
print(f'num1 * num2 = {num1 * num2}')
print(f'num1 - num2 = {num1 - num2}')
print(f'num1 + num2 = {num1 + num2}')
raise 키워드를 이용하면 예외를 발생시킬 수 있다.
def divCalculator(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:
divCalculator(num1, num2) # 이 부분에서 에러가 발생하므로
except Exception as e:
print(f'Exception : {e}')
- 실습
사용자가 문자 메시지를 보낼때 10글자 이하면 SMS로 발송하고,
10글자를 초과하면 MMS로 발송하는 프로그램을 예외 처리를 이용해서 만들어보자.
def sendSMS(msg):
if len(msg) > 10:
raise Exception('길이 초과!! MMS전환 후 발송!!', 1) # 뒤에 1 확인!
else:
print('SMS 발송!!')
def sendMMS(msg):
if len(msg) <= 10:
raise Exception('길이 미달!! SMS전환 후 발송!!', 2) # 뒤에 2 확인!
else:
print('MMS 발송!!')
msg = input('input message : ')
try:
sendSMS(msg)
except Exception as e:
print(f'e: {e.args[0]}')
print(f'e: {e.args[1]}')
if e.args[1] == 1:
sendMMS(msg)
elif e.args[1] == 2:
sendSMS(msg)
# args[0] 부분이 출력 안됨 다시 확인해 볼 것 !
args[0] 부분이 출력 안됨 다시 확인해 볼 것 !
이 글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었습니다.