DIVERSITY IS GOOD
DIVERSITY IS GOOD

테크/python basic

예외 처리(Exception Handling): 안전한 코드 작성하기

diversity is good 2025. 1. 25. 03:31
반응형

소프트웨어 개발에서 예외(Exception)는 프로그램 실행 중에 발생하는 예기치 않은 상황을 의미합니다. 이러한 상황을 올바르게 처리하지 않으면 프로그램이 중단되거나 예기치 못한 동작을 할 수 있습니다. 따라서 예외 처리는 안전하고 신뢰할 수 있는 코드를 작성하는 데 필수적인 요소입니다. 이번 튜토리얼에서는 예외 처리의 기본 개념부터 효과적인 사용법까지 단계별로 알아보겠습니다.


1. 예외(Exception)란 무엇인가?

예외는 프로그램이 실행 중에 발생하는 오류 상황을 나타냅니다. 이는 파일이 존재하지 않거나 네트워크 연결이 실패하거나, 숫자를 0으로 나누는 경우와 같은 다양한 상황에서 발생할 수 있습니다. 예외는 보통 두 가지로 분류됩니다:

  • Runtime Exception: 실행 중 발생하는 오류로, 프로그래머가 예측하지 못한 상황에서 발생합니다.
  • Checked Exception: 컴파일 타임에 발생 가능한 오류로, 반드시 처리해야 합니다.

2. 파이썬에서의 예외 처리 기본

파이썬에서는 try, except 블록을 사용하여 예외를 처리할 수 있습니다. 다음은 기본적인 구조입니다:

try:
    # 예외가 발생할 가능성이 있는 코드
except 예외_타입 as e:
    # 예외가 발생했을 때 실행되는 코드
else:
    # 예외가 발생하지 않았을 때 실행되는 코드
finally:
    # 예외 발생 여부와 상관없이 항상 실행되는 코드

예제

try:
    num = int(input("숫자를 입력하세요: "))
    result = 10 / num
    print(f"결과는 {result}입니다.")
except ZeroDivisionError as e:
    print("0으로 나눌 수 없습니다.")
except ValueError as e:
    print("유효한 숫자를 입력하세요.")
else:
    print("성공적으로 실행되었습니다!")
finally:
    print("프로그램이 종료됩니다.")

3. 예외 처리의 주요 원칙

3.1 명확하고 구체적인 예외 처리

모든 예외를 일반화하여 처리하기보다는, 가능한 한 구체적인 예외를 처리하는 것이 좋습니다.

# 비추천
try:
    # 코드
except Exception as e:
    print("오류가 발생했습니다.")

# 추천
try:
    # 코드
except FileNotFoundError as e:
    print("파일을 찾을 수 없습니다.")

3.2 최소한의 코드로 예외 처리

try 블록에는 예외가 발생할 가능성이 있는 코드만 포함하는 것이 좋습니다.

# 비추천
try:
    print("시작합니다.")
    num = int(input("숫자를 입력하세요: "))
    result = 10 / num
    print(result)
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

# 추천
print("시작합니다.")
try:
    num = int(input("숫자를 입력하세요: "))
    result = 10 / num
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

3.3 적절한 로깅(logging) 사용

예외 발생 시 오류를 기록(log)하면 문제를 추적하고 디버깅하기 쉬워집니다.

import logging

logging.basicConfig(level=logging.ERROR)

try:
    num = int(input("숫자를 입력하세요: "))
    result = 10 / num
except ZeroDivisionError as e:
    logging.error("0으로 나눌 수 없습니다.", exc_info=True)

4. 사용자 정의 예외 만들기

복잡한 프로그램에서는 사용자 정의 예외(Custom Exception)를 만들어 특정 상황에 맞는 예외를 처리할 수 있습니다.

class NegativeNumberError(Exception):
    def __init__(self, message="음수는 허용되지 않습니다"):
        self.message = message
        super().__init__(self.message)

try:
    num = int(input("숫자를 입력하세요: "))
    if num < 0:
        raise NegativeNumberError
except NegativeNumberError as e:
    print(e)

5. 예외 처리 베스트 예제

5.1 예외 처리의 우선순위 결정

가장 구체적인 예외부터 처리하고, 일반적인 예외는 마지막에 처리합니다.

try:
    # 코드
except ValueError:
    # ValueError 처리
except Exception:
    # 기타 예외 처리

5.2 중복 코드 제거

공통적으로 처리해야 할 로직은 별도의 함수로 분리합니다.

def handle_error(e):
    print(f"오류 발생: {e}")

try:
    # 코드
except Exception as e:
    handle_error(e)

결론

예외 처리는 안전한 코드를 작성하기 위한 중요한 기술입니다. 올바른 예외 처리는 프로그램의 신뢰성을 높이고, 사용자에게 명확한 피드백을 제공하며, 디버깅 시간을 단축할 수 있습니다. 이번 튜토리얼에서 소개한 원칙과 방법을 활용해 견고한 프로그램을 작성해 보세요!

반응형