cmod.ify

Exception Handling(예외 처리) 본문

BASIC/PYTHON

Exception Handling(예외 처리)

modifyC 2025. 12. 23. 18:03
728x90
반응형

1. 오류의 종류 (Error vs Exception)

프로그램에서 발생하는 문제는 크게 세 가지로 나뉨.

  • 컴파일 오류: 오타나 문법 위반으로 아예 실행조차 안 되는 오류. (수정 필수)
  • 논리적 오류: 실행은 잘 되는데, 계산을 틀려서 결과가 이상하게 나오는 오류. (디버깅 필요)
  • 예외(Exception): 문법은 맞지만 실행 중에 외부 요인(잘못된 입력, 파일 없음 등)으로 중단되는 현상

2. 디버깅(Debugging)

예외나 논리적 오류의 원인을 찾아내고 수정하는 과정임.

  • 방법: 직접 로그를 찍어보는 Logging, 개발 도구(IDE)의 Debugging Tool, 혹은 Testing Tool을 활용함.

3. 예외 처리(Exception Handling)

프로그램이 예외 때문에 갑자기 죽지 않도록 안전장치를 치는 것임.

 

기본 구조: try - except

def ten_div(x):
    try:
        return 10 / x  # 에러가 발생할 것 같은 코드
    except:
        return 0       # 에러 발생 시 대신 실행할 코드

 

특정 예외만 골라 잡기

에러의 종류(클래스)에 따라 처리를 다르게 할 수 있음.

try:
    # 실행 코드
except IndexError:
    print("인덱스 범위 초과")
except ZeroDivisionError as e:
    print(f"0으로 나눌 수 없음: {e}") # e를 통해 에러 메시지 확인 가능

주의사항: 예외 계층 구조 Exception은 모든 에러의 조상님격임.

따라서 Exception을 먼저 써버리면 아래에 쓴 구체적인 에러(IndexError 등)는 실행되지 않음.

구체적인 에러부터 먼저 써야 함

else와 finally

  • else: 예외가 발생하지 않았을 때만 실행.
  • finally: 예외 발생 여부와 상관없이 무조건 마지막에 실행. (주로 파일 닫기 등에 사용)
li = [100,200,300]

try:
    print(li[4])
# 예외 발생 시 예외 내용을 e에 전달
except IndexError as e:
    print(e)
except Exception:
    print("나머지 예외 처리")
else:
    print("예외 발생 안하면 처리")
finally:
    print("무조건 처리")

 

강제로 예외 발생시키기

프로그램 설계상 특정 상황에서 에러를 내야 할 때 사용함.

  • raise: 의도적으로 예외 인스턴스를 생성함. (raise Exception("메시지"))
  • assert (단언): 특정 조건이 참이 아니면 AssertionError를 내며 즉시 중단함. 주로 디버깅 단계에서 검증용으로 씀.
x = 100

# Exception
if x > 50:
    raise Exception("강제 예외 처리")

# AssertionError
assert x < 50, " 강제 중단"

 

728x90
반응형

'BASIC > PYTHON' 카테고리의 다른 글

ORM(Object Relational Mapping)  (0) 2025.12.30
File Handling  (0) 2025.12.23
유용한 함수  (0) 2025.12.23
모듈과 패키지  (0) 2025.12.23
OOP(객체 지향 프로그래밍)  (1) 2025.12.22