예외 처리 (Multiple Exceptions)

YeHee·2024년 12월 20일

⏰ 2024.12.20 (D+52)

1. 예외 처리 기본 구조

try:
    # 예외가 발생할 만한 코드
except 예외명:
    # 예외가 발생했을 때 처리할 코드
else:
    # 예외가 발생하지 않았을 때 실행할 코드
finally:
    # 예외 발생 여부와 상관없이 항상 실행할 코드
  • try: 예외가 발생할 가능성이 있는 코드를 작성
  • except: 특정 예외가 발생했을 때 실행되는 코드
  • else: 예외가 발생하지 않았을 때 실행되는 코드
  • finally: 예외 발생 여부에 관계없이 항상 실행되는 코드

2. 여러 예외 처리

try:
    # 예외가 발생할 만한 코드
except (예외명1, 예외명2):
    # 예외명1 또는 예외명2가 발생했을 때 처리할 코드

📖 예시

try:
    # 예외가 발생할 만한 코드
except ValueError:
    print("숫자만 입력하세요.")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
except IndexError:
    print("인덱스 범위를 벗어났습니다.")
  • 여러 예외를 한 번에 처리할 수 있음
  • except (ValueError, ZeroDivisionError)로 한 번에 처리 가능

3. 예외 발생시키기 (Raise)

raise Exception("예외 메시지")

📖 예시

value = int(input('숫자 입력?'))
if value % 2 != 0:
    raise Exception(f'{value}는 짝수가 아니예요')
  • raise를 사용하여 예외를 명시적으로 발생시킬 수 있음

4. 사용자 정의 예외 클래스

방법 1: Exception 상속

class NotEvenException(Exception):
    def __init__(self):
        super().__init__('짝수가 아니예요')

try:
    value = int(input('숫자 입력?'))
    if value % 2 != 0:
        raise NotEvenException()
    print(f'{value}는 짝수예요')
except NotEvenException as e:
    print(e)
  • Exception을 상속받아 예외 클래스를 정의
  • super().init(예외 메시지)로 부모 클래스의 init() 호출

방법 2: 매개변수로 예외 메시지 전달

class NotEvenException(Exception):
    def __init__(self, errorMessage):
        super().__init__(errorMessage)

try:
    value = int(input('숫자 입력?'))
    if value % 2 != 0:
        raise NotEvenException('홀수 입력 에러')
    print(f'{value}는 짝수예요')
except NotEvenException as e:
    print(e)
  • 예외 발생 시 메시지를 매개변수로 전달 가능

방법 3: 간단한 사용자 정의 예외

class NotEvenException(Exception):
    pass

try:
    value = int(input('숫자 입력?'))
    if value % 2 != 0:
        raise NotEvenException('홀수 입력 에러')
    print(f'{value}는 짝수예요')
except NotEvenException as e:
    print(e)
  • 메시지 없이 단순히 예외를 발생시키는 방법

5. 예외 처리 흐름

  • try 블록: 예외가 발생할 수 있는 코드를 실행
  • except 블록: 예외가 발생하면 해당 예외를 처리
  • else 블록: 예외가 발생하지 않으면 실행
  • finally 블록: 예외 발생 여부와 관계없이 항상 실행

6. 종합 예시

try:
    fnum = int(input('첫번째 숫자 입력?'))
    snum = int(input('두번째 숫자 입력?'))
    result = fnum / snum
except ValueError:
    print("숫자만 입력하세요.")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
except Exception as e:
    print("예상치 못한 에러 발생:", e)
else:
    print(f"결과: {result}")
finally:
    print("처리 완료.")
  • try: 사용자 입력을 받아 계산 시도
  • except: 예외 발생 시 처리
  • else: 예외가 발생하지 않으면 결과 출력
  • finally: 예외 발생 여부와 관계없이 항상 실행

0개의 댓글