Linuxias
Developer's Delight
Linuxias
  • Category
    • AI
      • Deep Learning
      • Machine Learning
      • Data Science
      • Framework
      • MLOps
      • Paper-Review
      • Tips
    • Android
      • Kotlin
      • Component
      • Compose
      • Compose UI
      • Material
      • Testing
    • Software Architecture
      • Architecture Pattern
      • Design Pattern
      • Requirement Engineering
    • Linux
      • Compile & Link
      • Command & Tool
      • Container
      • Debugging & Testing
      • Profiling
      • Kernel Analysis
      • Server
      • Shell Script
      • System Programming
    • Language
      • Carbon
      • C,C++
      • C#
      • Java
      • Python
    • ETC
      • Data Struct | Algorithm
      • git
      • Security
    • Book
    • 경제공부
      • 세금
      • 부동산
hELLO · Designed By 정상우.
Linuxias

Developer's Delight

Language/Python

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

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**는 간단한 예외를 무시하고 싶을 때 더 깔끔하고 효율적입니다.

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

반응형
저작자표시 비영리 (새창열림)

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

Python 정적 코드 분석 도구: MyPy와 PyType 비교  (0) 2024.12.05
setdefault vs defaultdict  (1) 2024.11.30
Json Schema를 사용한 Json 유효성 검사하기  (0) 2024.04.06
[numpy] r_, c_ 함수에 대하여  (0) 2023.12.02
[Python] Sliding Window  (0) 2023.08.24
    'Language/Python' 카테고리의 다른 글
    • Python 정적 코드 분석 도구: MyPy와 PyType 비교
    • setdefault vs defaultdict
    • Json Schema를 사용한 Json 유효성 검사하기
    • [numpy] r_, c_ 함수에 대하여
    Linuxias
    Linuxias
    I want to be a S/W developer who benefits people.

    티스토리툴바