목차
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: 수치 계산 관련 예외ZeroDivisionErrorOverflowErrorFloatingPointError
LookupError: 잘못된 인덱스나 키 접근IndexErrorKeyError
OSError: 운영체제 관련 예외FileExistsErrorPermissionError
'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 |