[python] except raise assert
A A

목차

    728x90

    1. except 구문에서 raise 사용

    raise는 예외를 발생시킬 때 사용하는 키워드.

    • 반드시 except 안에서만 써야 하는 건 아님
    • 일반 코드, 함수, 조건문 등에서도 raise는 자유롭게 사용할 수 있다
    def divide(x, y):
        if y == 0:
            raise ValueError("0으로 나눌 수 없습니다.")
        return x / y
    

     

    except 블록 안에서 raise를 쓰는 경우는 예외를 다시 던질 때이다.

    try:
        something()
    except ValueError as e:
        print("에러 발생:", e)
        raise  # 예외를 다시 던짐 (re-raise)
    

     

    2. except 순서의 중요성

    순서 매우 중요하다! 예외는 위에서부터 차례대로 검사한다.

    • 구체적인 예외를 먼저, Exception 같은 일반 예외는 나중에 써야 함
    • 반대로 하면, 구체적인 예외는 실행되지 않음

    # 나쁜 예: 모든 예외가 첫 except에서 잡혀버림
    try:
        risky()
    except Exception:
        print("모든 에러")
    except ZeroDivisionError:
        print("0 나누기 에러")  # 실행 안 됨
    
    # 좋은 예
    try:
        risky()
    except ZeroDivisionError:
        print("0 나누기 에러")
    except Exception:
        print("다른 에러")
    

     

    3. assert 키워드란?

    조건이 True가 아니면 AssertionError를 발생시키는 디버깅 도구.

    뒤에 나온 표현식을 평가하는데, 표현식이 True로 평가 될 경우 아무일이 일어나지 않음.

    False일 경우 AssertionError 발생

    x = 5
    assert x > 0  # 통과
    assert x < 0  # AssertionError 발생
    

    보통 assert는 테스트나 디버깅 용도로 사용된다. 운영 환경에선 꺼지기도 함 (옵션에 따라).

    주의: assert는 개발 중 잘못된 상태를 빠르게 잡기 위한 도구이지, 사용자의 입력 검증에는 적절하지 않음.

     

    정리

    • raise: 예외를 일으킴 (어디서든 가능)
    • except: 예외를 처리 (순서 중요, 구체적인 예외부터 작성)
    • assert: 조건이 False일 경우 예외 발생 (디버깅용)

     

    4. 예외 클래스 계층 구조

    Python의 모든 예외는 BaseException을 최상위로 하고 계층적으로 구성되어 있어요.

    • BaseException: 모든 예외의 최상위 클래스
    • Exception: 대부분의 일반적인 예외가 상속받는 클래스
    • KeyboardInterrupt: 사용자가 Ctrl+C로 실행 중단 시 발생

    Exception 하위에는 아래와 같은 다양한 예외가 있음:

    • ArithmeticError: 수치 계산 관련 예외
      • ZeroDivisionError
      • OverflowError
      • FloatingPointError
    • LookupError: 잘못된 인덱스나 키 접근
      • IndexError
      • KeyError
    • OSError: 운영체제 관련 예외
      • FileExistsError
      • PermissionError

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

    [python] 클로저(Closure)  (0) 2025.05.17
    [python] lambda , map() , filter()  (0) 2025.05.17
    [python] sys.path 와 sys.path.append()  (0) 2025.05.15
    [python] if __name__ == "__main__" :  (0) 2025.05.15
    [python] math, random, platform  (2) 2025.05.15
    Copyright 2024. GRAVITY all rights reserved