예외 처리 복습

기본 구조

  • try ~ except

  • try문에는 시도할 명령어가 입력되고, 여기서 오류가 발생할 경우 except문으로 넘어감

  • try문 실행 도중 예외가 발생할 경우 예외가 발생한 시점 이후의 코드는 실행되지 않음

    while True:
        try:
            num = int(input('정수를 입력해주세요: '))
            print("hi!")
        except:
            print('오류 발생')
            
    '''
    정수를 입력해주세요: 1
    hi!
    정수를 입력해주세요: hi
    오류 발생
    '''

특정 예외 처리하기

  • 하나의 except를 사용할 경우 발생한 모든 예외를 처리함

  • except 뒤에 특정 에외의 이름을 명시해주면 해당 예외가 발생했을 때만 처리. 여기에는 기본적으로 내장된 예외가 들어갈 수도 있고, 사용자가 직접 정의한 예외를 넣을 수도 있음

  • except는 여러번 사용 가능

    while True:
        try:
            num = int(input('정수를 입력해주세요: '))
            print("hi!")
        except SyntaxError as s:
            print('문법 오류 발생')
        except ValueError as v:
            print('입력값 오류 발생')

else

  • except가 예외 발생시 처리하는 코드라면, elsetry의 실행 결과 예외가 발생하지 않았을 때 처리하는 코드를 작성하는 부분
  • excpet 없이 try ~ else는 옳지 않은 문법

finally

  • finally는 예외 발생 여부와 관계없이 항상 실행할 코드
  • 따라서 try문 실행 중 예외가 발생하지 않는다면 try, else, finally 부분에 작성된 코드가 실행되고, try문 실행 중 예외가 발생한다면 try문의 예외 발생시점까지의 코드, except, finally 부분의 코드가 실행됨

raise와 assert

  • raise는 특정 오류를 발생시키는 문법

    if 조건문:
      	raise ValueError
  • assertassert 조건문, 표현문으로 작성되며 조건문 부분이 거짓이 될 경우 AssertionError를 발생시키는 문법

    • raise문과 유사하나 예외처리라기 보다는 절대 나와서는 안 되는 조건을 검사하는 경우, 즉 디버깅 용도로 많이 사용됨

사용자 정의 예외 만들기

  • 사용자가 정한 이름으로 예외 클래스를 만들어 사용할 수 있으며, 이 때 Exception 클래스를 상속하여 만듦

    class 예외이름(Exception):
      	def __init__(self):
          	super().__init__('에러메시지')
            
    # or
    class 예외이름(Exception):
      	pass
  • 두번째 경우와 같이 별도로 메시지를 지정하지 않고 생성해주었을 때는

    raise 예외이름('메시지')

    위와 같이 메시지를 전달해주면 됨

0개의 댓글

Powered by GraphCDN, the GraphQL CDN