ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] 예외처리
    python 2025. 5. 29. 15:12

    예외처리

    프로그램 실행 중 발생할 수 있는 오류(예외)를 우아하게 처리하여 프로그램이 중단되지 않도록 하는 방법입니다.

     

    🔥 왜 예외처리가 필요할까?

    코드를 실행할 때 예상하지 못한 상황이 발생할 수 있습니다.

    예를 들어:

    print(10 / 0)  # ZeroDivisionError 발생

     

    이 코드는 0으로 나누기를 시도하므로 ZeroDivisionError가 발생하고 프로그램이 강제로 종료됩니다.
    하지만 예외처리를 하면 프로그램이 계속 실행되도록 만들 수 있습니다.

     

    ✅ 기본 구조: try ~ except

    try:
        # 예외가 발생할 수 있는 코드
    except 예외종류:
        # 예외가 발생했을 때 실행되는 코드

     

    예시:

    try:
        num = int(input("숫자를 입력하세요: "))
        print(10 / num)
    except ZeroDivisionError:
        print("0으로 나눌 수 없습니다.")
    except ValueError:
        print("숫자가 아닌 값을 입력했습니다.")

     

    ✅ 추가 옵션

    • else: 예외가 발생하지 않았을 때 실행
    • finally: 예외 발생 여부와 관계없이 항상 실행
    try:
        print("나눗셈 수행")
        result = 10 / 2
    except ZeroDivisionError:
        print("0으로 나눌 수 없습니다.")
    else:
        print("예외 없이 성공:", result)
    finally:
        print("항상 실행되는 finally 블록")

     

    🎯 자주 발생하는 예외 종류

    예외 설명
    ZeroDivisionError 0으로 나눌 때
    ValueError 형 변환 실패 등
    TypeError 잘못된 타입 사용
    IndexError 인덱스 범위 초과
    KeyError 딕셔너리에 없는 키 사용
    FileNotFoundError 파일이 존재하지 않을 때

     

    📌 정리

    • 예외처리를 하면 프로그램이 비정상 종료되지 않도록 방어할 수 있음
    • try 블록에서 예외가 발생하면 except에서 처리
    • 상황에 따라 else, finally도 함께 사용 가능

     

    실습

    try:
        print("나누기 전용 계산기입니다.")
        num1 = int(input("첫 번째 숫자를 입력하세요 : "))
        num2 = int(input("두 번째 숫자를 입력하세요 : "))
        print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))
    except ValueError:
        print("에러! 잘못된 값을 입력하였습니다.")

     

    나누기 전용 계산기입니다.
    첫 번째 숫자를 입력하세요 : 6
    두 번째 숫자를 입력하세요 : 삼
    에러! 잘못된 값을 입력하였습니다.

     

    try:
        print("나누기 전용 계산기입니다.")
        num1 = int(input("첫 번째 숫자를 입력하세요 : "))
        num2 = int(input("두 번째 숫자를 입력하세요 : "))
        print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))
    except ValueError:
        print("에러! 잘못된 값을 입력하였습니다.")
    except ZeroDivisionError as err:
        print(err)

     

    나누기 전용 계산기입니다.
    첫 번째 숫자를 입력하세요 : 6
    두 번째 숫자를 입력하세요 : 0
    division by zero

     

    try:
        print("나누기 전용 계산기입니다.")
        nums = []
        nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))
        nums.append(int(input("두 번째 숫자를 입력하세요 : ")))
        #nums.append(int(nums[0] / nums[1]))
        print("{0} / {1} = {2}".format(nums[0], nums[1], nums[2]))
    except ValueError:
        print("에러! 잘못된 값을 입력하였습니다.")
    except ZeroDivisionError as err:
        print(err)
    except Exception as err:
        print("알 수 없는 에러가 발생하였습니다.")
        print(err)

     

    나누기 전용 계산기입니다.
    첫 번째 숫자를 입력하세요 : 6
    두 번째 숫자를 입력하세요 : 3
    알 수 없는 에러가 발생하였습니다.
    list index out of range

     

    실습2

    try:
        print("한 자리 숫자 나누기 전용 계산기입니다.")
        num1 = int(input("첫 번째 숫자를 입력하세요 : "))
        num2 = int(input("두 번째 숫자를 입력하세요 : "))
        
        # ❗한 자리 숫자가 아니면 일부러 ValueError 발생시킴
        if num1 >= 10 or num2 >= 10:
            raise ValueError
        print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2))) 
    
    except ValueError:
        print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")

     

    한 자리 숫자 나누기 전용 계산기입니다.
    첫 번째 숫자를 입력하세요 : 10
    두 번째 숫자를 입력하세요 : 5
    잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.

     

    실습3 (사용자 정의 예외처리)

    class BigNumberError(Exception):
        pass
    
    try:
        print("한 자리 숫자 나누기 전용 계산기입니다.")
        num1 = int(input("첫 번째 숫자를 입력하세요 : "))
        num2 = int(input("두 번째 숫자를 입력하세요 : "))
        if num1 >= 10 or num2 >= 10:
            raise BigNumberError
        print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2))) 
    except ValueError:
        print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
    except BigNumberError:
        print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요.")

     

    한 자리 숫자 나누기 전용 계산기입니다.
    첫 번째 숫자를 입력하세요 : 10
    두 번째 숫자를 입력하세요 : 5
    에러가 발생하였습니다. 한 자리 숫자만 입력하세요.

    class BigNumberError(Exception):
        def __init__(self, msg):
            self.msg = msg
            
        def __str__(self):
            return self.msg
    try:
        print("한 자리 숫자 나누기 전용 계산기입니다.")
        num1 = int(input("첫 번째 숫자를 입력하세요 : "))
        num2 = int(input("두 번째 숫자를 입력하세요 : "))
        if num1 >= 10 or num2 >= 10:
            raise BigNumberError("입력값 : {0}, {1}".format(num1, num2))
        print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2))) 
    except ValueError:
        print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
    except BigNumberError as err:
        print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요.")
        print(err)

     

     

    'python' 카테고리의 다른 글

    [python] 모듈  (0) 2025.06.02
    [python] finally  (0) 2025.05.29
    [python] 스타크래프트 프로젝트  (0) 2025.05.29
    [python] super  (0) 2025.05.28
    [python] pass  (0) 2025.05.28
Designed by Tistory.