ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 예외 처리 고급
    NAN/Python 2021. 6. 20. 20:44
    728x90

     


    Exception

     

     

     

    Error Code

     

     

    지난 포스팅에 가볍게 에러 코드의 종류를 살펴보았는데, 이는 try 구문에도 사용할 수 있다.

     

    모든 예외 정보는 예외 객체 exception object에 저장되는데 이를 활용 할 수 있다.

     

    예외 객체의 기본 형태는 다음과 같다.

     

    try:
    	예외가 발생할 가능성이 있는 구문 
        
    except 에러 코드 as 예외 객체를 활용할 변수 이름:
    	예외가 발생했을 때 실행할 구문

     

     

    기본적으로 try except 구문과 큰 차이는 없지만, 여러 가지 예외 상황을 예상하고 미리 대처할 수 있다는 점으로

     

    규모가 큰 프로젝트에 자주 사용되곤한다.

     

     

    list_number = [52,273,32,72,100]
    
    try:
      number = int(input("숫자를 입력하세요 : "))
    
      print(f"{number}번째 요소: {list_number[number]}")
    
    except ValueError as x:
      print("정수를 입력해 주세요!")
      print(x)  
    except IndexError as x:
      print("리스트의 인덱스를 벗어났어요!")
      print(x)  
      
      
    숫자를 입력하세요 : 문자를 입력했다!
    정수를 입력해 주세요!
    invalid literal for int() with base 10: '문자를 입력했다!'

     

     

    list_number = [52,273,32,72,100]
    
    try:
      number = int(input("숫자를 입력하세요 : "))
    
      print(f"{number}번째 요소: {list_number[number]}")
    
    except ValueError as x:
      print("정수를 입력해 주세요!")
      print(x)  
    except IndexError as x:
      print("리스트의 인덱스를 벗어났어요!")
      print(x)  
    숫자를 입력하세요 : 100
    리스트의 인덱스를 벗어났어요!
    list index out of range

     

    이런 형태로 예외를 구분하고 예외가 발생했을 때 사용될 코드를 미리 작성 해 두면 되는데, 만약

     

    작성된 예외 범위를 벗어난다면 마찬가지로 프로그램은 종료된다.

     

    이를 방지하기 위해 예외 처리 후에는 항상 except Exception as 예약어 : 를 추가하자

     

     

    list_number = [52,273,32,72,100]
    
    try:
      number = int(input("숫자를 입력하세요 : "))
      
      print(f"{number}번째 요소: {list_number[number]}")
      
      예외.발생함()
    
    except ValueError as x:
      print("정수를 입력해 주세요!")
      print(x)  
    except IndexError as x:
      print("리스트의 인덱스를 벗어났어요!")
      print(x)  
    except Exception as x:
      print("알수 없는 오류 발생!")
      print(x)  
      
    숫자를 입력하세요 : 3
    3번째 요소: 72
    알수 없는 오류 발생!
    name '예외' is not defined

     

    코드를 살펴보면 예외. 발생함()이라는 정의되지 않은 코드를 작성하고 input은 범위에 맞는 숫자를 입력하였는데

     

    범위에 맞게 작성된 코드는 실행이 되고,

     

    알 수 없는 오류 역시 알려주며 프로그램이 안정적으로 종료된 것을 확인할 수 있었다.

     

    추가로 너무 치명적인 문제에도 프로그램이 종료되지 않는다면 그것 또 한 문제가 될 수 있으니

     

    상황에 맞게 잘 조절하여 사용하도록 하자

     

    이와 같은 예외 처리는 게임 서버가 터졌다거나 명절에 기차 예매로 인해 인파가 몰려

     

    데이터 베이스의 연결이 많아지면 예외가 발생할 경우에 사용된다.

     

    즉 모든 프로그래밍 서비스에는 예외 처리가 필수적이라는 이야기이다.

     

     


     

    raise

     

    아직 구현되지 않았거나, 예외 처리로 넘어가게 되면 큰 문제가 일어날 수 있는 부분을 강제 종료시키기 위해

     

    사용되는 키워드이다.

     

    pass는 넘어가는 구문이라면 raise는 종료시키는 구문이라고 할 수 있다.

     

    num = input('정수 입력 : ')
    num = int(number)
    
    if num > 0:
    
      raise NotImplementedError
      
    else:
      
      raise NotImplementedError
      
      
      정수 입력 : 7
    ---------------------------------------------------------------------------
    NotImplementedError                       Traceback (most recent call last)
    <ipython-input-44-94402ccf4275> in <module>()
          4 if num > 0:
          5 
    ----> 6   raise NotImplementedError
          7 
          8 else:
    
    NotImplementedError: 

     

    구문의 활용은 'raise 예외 객체'로 이루어져 있으며,

     

    이때 출력되는 메시지의 형태를 바꾸고 싶다면 예외 클래스를 만들어 활용하여야 한다.

     

    클래스는 추후에 살펴보도록 하자 

     


     

    'NAN > Python' 카테고리의 다른 글

    [Python] Class  (0) 2021.06.20
    [Python] 외부 모듈  (0) 2021.06.20
    [Python] 예외 처리 try, except, finally  (0) 2021.06.20
    [Python] 함수 고급 (튜플,map,filter,lambda)  (0) 2021.06.20
    [Python] 함수의 활용  (0) 2021.06.20
Designed by Tistory.