-
[Python] 예외Language/Python 2024. 6. 4. 14:37
예외란?
문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제이다.
(문법적인 문제가 있으면 에러)
ex) 10 / 0 -> ZeroDivisionError
def add(n1,n2): print(n1+n2) def div(n1,n2): print(n1/n2) fn = int(input('input firstNum : ')) sn = int(input('input secondNum : ')) add(fn,sn) div(fn,sn) >>> 10 ZeroDivisionError: division by zero
예외관련 클래스는 Exception 클래스를 상속한다.
출처: 제로베이스 예외처리
예상하지못한 예외가 프로그램 전체 실행에 영향이 없도록 처리.
1) try ~ except
예외 발생 예상 구분을 try ~ except로 감싼다.
def add(n1,n2): print(n1+n2) def div(n1,n2): try: print(n1/n2) except: print('예상치 못한 문제가 발생했습니다.') fn = int(input('input firstNum : ')) sn = int(input('input secondNum : ')) add(fn,sn) div(fn,sn) >>> input firstNum : 10 input secondNum : 0 10 예상치 못한 문제가 발생했습니다.
1-1) try ~ except ~ 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('홀수입니다. 다시 입력하세요') print(nums)
1-2) finally
예외발생과 상관없이 항상 실행.
evenList = []; oddList = []; floatList = []; dataList = [] n = 1 while n < 6: try: data = input('숫자 입력 : ') floatnum = float(data) except: print('예외발생!') continue 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}')
2) 예외담당 클래스 Exception
def add(n1,n2): print(n1+n2) def div(n1,n2): try: print(n1/n2) except Exception as e: print(f'exception: {e}') fn = int(input('input firstNum : ')) sn = int(input('input secondNum : ')) add(fn,sn) div(fn,sn) >>> input firstNum : 10 input secondNum : 0 10 exception: division by zero
3) raise
raise 키워드를 이용하면, 예외를 발생시킬 수 있다.
def div(n1,n2): if n2 != 0: print(n1/n2) else: # n2가 0이 아닐경우, 강제로 예외발생시킴 raise Exception('0으로 나눌 수 없습니다.') fn = int(input('input firstNum : ')) sn = int(input('input secondNum : ')) try: div(fn,sn) except Exception as e: print(f'exception: {e}') >>> input firstNum : 10 input secondNum : 0 exception: 0으로 나눌 수 없습니다.
4) 사용자 예외 클래스
class NotUseZeroExcepton(Exception): def __init__(self,n): super().__init__(f'{n}은 사용할 수 없습니다.') def divCalculator(num1,num2): if num2 == 0: raise NotUseZeroExcepton(num2) else: print(f'{num1} / {num2} = {num1 /num2 }') num1 = int(input('input number1 : ')) num2 = int(input('input number2 : ')) try: divCalculator(num1,num2) except NotUseZeroExcepton as e: print(e) >>> input number1 : 10 input number2 : 0 0은 사용할 수 없습니다.
'Language > Python' 카테고리의 다른 글
[Python] 텍스트파일 (1) 2024.06.06