Search

예외 / 예외 처리

예외가 발생하는 구문에 해당하는 대표 클래스들이다. 출처 : 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
복사