예외가 발생하는 구문에 해당하는 대표 클래스들이다. 출처 : ZeroBase Corp. 데이터취업패키지
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
Python
복사
# 숫자가 아닌 자료형이 입력되면 예외 처리를 하는 프로그램
nums = []
n = 1
while n < 6:
try:
num = int(input('숫자를 입력하세요: '))
except:
# 위의 결과에서 문제가 발생했을 경우
print('예외 발생!')
continue
nums.append(num)
n += 1 # 5 + 1 = 6 이 되었을 경우, while 문을 빠져나올 수 있기 때문에 전체 데이터 개수는 5개가 된다.
print(f'nums: {nums}')
Python
복사
try ~ except ~ else
예외가 발생했을 때 실행하는 구문 + 예외가 발생하지 않았을 때 실행하는 구문을 모두 표현할 때 사용한다.
ex) 짝수 5개를 리스트에 담는 프로그램
nums = []
n = 1
while n < 6: # n 이 6개 미만일 때까지만 수행
try:
num = int(input('숫자를 입력하세요: '))
except:
print('예외 발생!')
continue
else:
if num % 2 == 0: # 입력한 숫자가 짝수라면
nums.append(num)
n += 1
else: # 홀수라면
print('짝수를 입력해주세요')
continue
Python
복사
ex) 숫자 5개를 입력받아 짝수, 홀수, 실수로 구분해서 각각을 리스트에 저장하는 프로그램
odd = []
even = []
number = []
n = 1 # 전체 받은 데이터 개수를 세어줄 값 초기화
while n < 6:
try:
userinput = input('input number : ')
value = float(userinput)
except:
print('exception raise!!')
print('input number again!!')
continue
else: # 들어온 입력에 int() 해줬을 때 오류가 발생하지 않았다면 -> 실수 or 정수
# 정수이고 짝수일 경우
if value.is_integer() and value % 2 == 0:
print('even number!')
even.append(int(value))
n += 1
# 정수이고 홀수일 경우
elif value.is_integer() and value % 2 != 0:
print('odd number!')
odd.append(int(value))
n += 1
# 실수일 경우
elif value.is_integer() == False:
print('float number!')
number.append(float(userinput))
n += 1
print(f'eveList : {even}')
print(f'oddList : {odd}')
print(f'floatList : {number}')
Python
복사
odd = []
even = []
number = []
n = 1 # 전체 받은 데이터 개수를 세어줄 값 초기화
while n < 6:
try:
value = float(input('input number : '))
except:
print('exception raise!!')
print('input number again!!')
continue
else: # 들어온 입력에 int() 해줬을 때 오류가 발생하지 않았다면 -> 실수 or 정수
# 실수일 경우
if value - int(value) != 0:
print('float number!')
number.append(value)
n += 1
# 정수일 경우
else:
if int(value) % 2 != 0: # 홀수일 경우
print('odd number!')
odd.append(int(value))
n += 1
else:
print('even number!') # 짝수일 경우
even.append(int(value))
n += 1
print(f'eveList : {even}')
print(f'oddList : {odd}')
print(f'floatList : {number}')
Python
복사
finally
예외 발생과 상관없이 항상 실행하는 구문이다.
출처 : ZeroBase Corp. 데이터취업패키지
# 숫자 5개를 입력받아 짝수, 홀수, 실수와 입력한 모든 데이터를 각각 출력하는 프로그램
odd = []
even = []
number = []
datalist = []
n = 1
while n < 6:
try:
inputVal = input('input number : ')
num = float(inputVal)
except: # 입력한 값이 문자일 경우
print('exception raise!!')
print('input number again!!')
continue
else:
if num - int(num) != 0: # 실수일 경우
print('float number!')
number.append(num)
else:
if num % 2 == 0: # 짝수일 경우
print('even number!')
even.append(int(num))
else: # 홀수일 경우
print('odd number!')
odd.append(int(num))
n += 1
finally:
datalist.append(inputVal)
print(f'eveList : {even}')
print(f'oddList : {odd}')
print(f'floatList : {number}')
print(f'dataList : {datalist}')
Python
복사
Exception 클래스
예외를 담당하는 클래스다.
예외가 일어났을 경우에 어떤 원인으로 에러가 났는지를 표시할 수 있게 된다.
출처 : ZeroBase Corp. 데이터취업패키지
n1 = int(input('input number1 : '))
n2 = int(input('input number2 : '))
try:
print(f'n1 / n2 = {n1 / n2}')
except Exception as e:
print('0으로 나눌 수 없습니다.')
print(f'exception error : {e}')
print(f'n1 + n2 = {n1 + n2}')
print(f'n1 * n2 = {n1 * n2}')
print(f'n1 - n2 = {n1 - n2}')
Python
복사
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}') # e안에 '0으로 나눌 수 없습니다.'가 들어가게 된다.
Python
복사
사용자 예외 클래스
Exception 클래스를 상속해서 사용자 예외 클래스를 만들 수 있다.
사용자 예외 클래스는 반드시 Exception 클래스를 상속받아야 한다.
ex1 .
# 관리자 암호를 입력하고 다음 상태에 따라 예외 처리하는 예외 클래스를 만들어보자.
# 1. 암호 길이가 5미만인 경우
class PasswordLengthShortException(Exception):
def __init__(self,n):
super().__init__(f'{n} : 길이 5미만!')
# 2. 암호 길이가 10을 초과하는 경우
class PasswordLengthLongException(Exception):
def __init__(self,n):
super().__init__(f'{n} : 길이 10초과!')
# 3. 암호가 잘못된 경우
class PasswordWrongException(Exception):
def __init__(self,n):
super().__init__(f'{n} 잘못된 비밀번호!')
password = input('input admin password: ')
try:
if len(password) < 5:
raise PasswordLengthShortException(password)
elif len(password) > 10:
raise PasswordLengthLongException(password)
elif password != 'admin1234':
raise PasswordWrongException(password)
elif password == 'admin1234':
print('빙고!')
except PasswordLengthShortException as e1:
print(e1)
except PasswordLengthLongException as e2:
print(e2)
except PasswordWrongException as e3:
print(e3)
Python
복사