ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.