Python/Syntax 2021. 8. 24. 10:56

예외 처리

예외

  • 기본적으로 예외가 발생하면 프로세스가 종료된다.

예외 처리

  • 예외 발생을 감지하고 대처할 수 있다.

    try:
        실행할 명령
    except 예외 as 변수:
        오류 처리문
    [else: # 없어도 됨
        예외가 발생하지 않을 때의 처리]
    scores = ["89", "89점"]
    
    try:
        for score in scores:
            score_int = int(score)
            print(score_int)
    except:
        print("예외가 발생했습니다.")
    print("작업완료")
    
    ''' stdout
    89
    예외가 발생했습니다.
    작업완료
    '''
  • 예외 종류

    예외 설명
    NameError
    ValueError 값의 형식이 잘못됐을 때
    ZeroDivisionError 0으로 나눴을 때
    IndexError 인덱싱 가능한 범위를 벗어났을 때
    TypeError
  • except 키워드 뒤에 인자를 받지 않으면 모든 예외를 처리한다.

  • 예외에 alias를 붙이는 경우 except Exception as e와 같이 작성한다.

    str = "89"
    try:
        score = int(str)
        print(score)
        a = str[5]
    except Exception as e:
        print(e)
    print("작업완료")
    
    ''' stdout
    89
    string index out of range
    작업완료
    '''
  • raise

    • 예외를 발생시키는 키워드

      def calcsum(n):
          if n < 0 :
              raise ValueError("음수는 처리 불가")
      
          total = 0
          for i in range(n+1):
              total += i
      
          return total
      
      try:
          print(f"~ 10 = {calcsum(10)}")
          print(f"~ -5 = {calcsum(-5)}")
      except Exception as e:
          print("입력값이 잘못되었습니다.")
          print(e)
          print(type(e))
      
      ''' stdout
      ~ 10 = 55
      입력값이 잘못되었습니다.
      음수는 처리 불가
      <class 'ValueError'>
      '''

자원 정리

  • finally

    • 예외 발생 여부와 상관없이 항상 실행할 코드를 의미한다.

    • 주로 작업의 마무리 작업(cleanup)을 수행할 때 사용한다.

      from random import choice
      
      def connect():
          try:
              print("네트워크 접속")
              a = 2 / choice((0, 2))
              print("네트워크 통신 수행")
          except Exception as e:
              print(f"에러 : {e}")
          finally:
              print("접속 해제")
      
          print("작업 완료\n")
      
      connect()
      connect()
      connect()
      
      ''' stdout
      네트워크 접속
      에러 : division by zero
      접속 해제
      작업 완료
      
      네트워크 접속
      네트워크 통신 수행
      접속 해제
      작업 완료
      
      네트워크 접속
      네트워크 통신 수행
      접속 해제
      작업 완료
      '''
  • assert (단정문)

    • 조건이 True이면 통과, False이면 메시지를 가지는 예외를 발생시킨다.

    • 주로 테스트할 때 사용한다.

      score = 128
      
      assert score <= 100, "점수는 100 이하여야 합니다."
      
      # if score > 100:
      #     raise AssertionError("점수는 100 이하여야 합니다.")
      
      print(score)
      
      ''' stdout
      Traceback (most recent call last):
      File "파일명", line 3, in <module>
          assert score <= 100, "점수는 100 이하여야 합니다."
      AssertionError: 점수는 100 이하여야 합니다.
      '''

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

파이썬 모듈과 패키지  (0) 2021.08.24
파이썬 파일  (0) 2021.08.24
파이썬 표준 모듈  (0) 2021.08.24
파이썬 컬렉션 관리  (0) 2021.08.24
파이썬 집합(Set)  (0) 2021.08.22