Language/Python

python exception 일반적인 처리 방식과 Contextlib.suppress와의 차이

Linuxias 2024. 12. 7. 00:26
반응형

Python에서 예외 처리를 처리하는 방식에는 일반적으로 try-except 블록을 사용하며, 간단한 경우에는 contextlib.suppress를 사용할 수 있습니다. 이 두 가지 방식의 비교와 장단점을 정리해 보겠습니다.


1. try-except 블록

일반적인 예외 처리 방식

try:
    result = 10 / 0  # 예외 발생
except ZeroDivisionError:
    result = None
  • 동작:
    • 코드에서 특정 예외가 발생했을 때, 이를 잡아내어 처리합니다.
    • 예외를 세부적으로 처리하거나, 여러 예외를 한 번에 처리할 수 있습니다.
  • 장점:
    • 세부적인 예외 처리 가능: 예외 유형별로 분리하여 다르게 처리할 수 있습니다.
    • 커스텀 로직: 예외 발생 시 추가적인 로직을 구현할 수 있습니다.
    • 가독성: 복잡한 예외 처리를 명확히 표현할 수 있습니다.
  • 단점:
    • 코드 길이가 길어질 수 있음: 예외가 많아지면 except 블록이 많아져 가독성이 떨어질 수 있습니다.
    • 단순한 경우에도 다소 과한 구조일 수 있음.

2. contextlib.suppress 사용

간단한 예외 처리 방식

from contextlib import suppress

with suppress(ZeroDivisionError):
    result = 10 / 0  # 예외 발생, 무시됨
  • 동작:
    • with 블록 내에서 특정 예외가 발생하면 이를 자동으로 무시합니다.
    • 예외를 무시하고 나머지 코드 실행을 이어갑니다.
  • 장점:
    • 간결함: 코드가 매우 단순하고 짧습니다.
    • 특정 예외를 무시하기 좋음: "아무 작업도 필요 없는" 경우 유용합니다.
    • 가독성: 불필요한 try-except 블록을 줄여 코드가 깔끔합니다.
  • 단점:
    • 범용성 제한: 한 번에 하나의 예외만 처리 가능.
    • 로직 포함 불가: 예외가 발생했을 때 추가적인 작업을 수행할 수 없습니다.
    • 디버깅 어려움: 예외가 무조건 무시되므로 문제를 추적하기 어려울 수 있습니다.

3. 비교

항목 try-except contextlib.suppress

주요 목적 예외 처리 및 복잡한 로직 처리 단순히 특정 예외를 무시
코드 길이 상대적으로 길어질 수 있음 매우 간결
가독성 복잡한 로직에서 더 명확 단순 예외 무시에서 더 좋음
예외 세분화 여러 예외 처리 가능 하나의 예외만 처리 가능
후속 작업 추가 로직 구현 가능 불가능
사용 사례 예외에 따른 대응이 필요할 때 예외를 무시하고 넘어갈 때

4. 사용 사례

try-except 사용:

  • 예외 유형별로 다르게 처리하거나, 디버깅 정보를 추가해야 할 때.
  • 예외 발생 시 로깅, 리트라이, 혹은 다른 작업을 수행해야 할 때.
try:
    value = int(input("숫자를 입력하세요: "))
except ValueError:
    print("유효하지 않은 입력입니다.")
except KeyboardInterrupt:
    print("사용자가 입력을 중단했습니다.")

contextlib.suppress 사용:

  • 단순히 특정 예외를 무시하고 코드를 이어가고 싶을 때.
  • 파일이 없으면 무시하고 넘어가는 경우:
from contextlib import suppress

with suppress(FileNotFoundError):
    with open("non_existent_file.txt") as f:
        content = f.read()

결론

  • **try-except**은 더 강력하고 세부적인 예외 처리를 가능하게 하지만, 코드가 길어질 수 있습니다.
  • **contextlib.suppress**는 간단한 예외를 무시하고 싶을 때 더 깔끔하고 효율적입니다.

따라서, 상황에 따라 적절한 방식을 선택하는 것이 중요합니다.

반응형