"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python에서 예외 처리를 구현하는 모범 사례

Python에서 예외 처리를 구현하는 모범 사례

2024-09-27에 게시됨
검색:274

Best Practices for Implementing Exception Handling in Python

강력하고 유지 관리가 가능한 애플리케이션을 만들려면 효과적인 예외 처리 코드를 작성하는 것이 필수적입니다.
다음은 Python에서 예외 처리 코드를 작성하기 위한 몇 가지 모범 사례입니다.

1. 감당할 수 있는 것만 잡아라

구체적으로 작성하세요.

  • 광범위한 제외 절을 사용하는 대신 특정 예외를 포착하세요.
  • 이렇게 하면 예상하고 처리 방법을 알고 있는 예외만 포착됩니다.
try:
    # Code that might raise an exception
except ValueError as e:
    print(f"Value error occurred: {e}")

2. 다음을 제외하고 Bare를 피하십시오.

특정 예외 포착:

  • 예외 유형을 지정하지 않고 Except:를 사용하지 마세요.
  • 이로 인해 예상치 못한 오류가 발견되어 디버깅이 어려워질 수 있습니다.
try:
    # Code that might raise an exception
except Exception as e:  # Catch all exceptions if necessary
    print(f"An error occurred: {e}")

3. try-Exception-else-finally 블록을 사용하세요.

  • try: 예외가 발생할 수 있는 코드를 여기에 배치하세요.
  • Except: 이 블록의 예외를 처리합니다.
  • else: try 블록에서 예외가 발생하지 않은 경우 이 블록을 실행합니다.
  • finally: 종종 정리에 사용되는 예외 발생 여부에 관계없이 이 블록을 실행합니다.
try:
    # Code that might raise an exception
except ValueError as e:
    print(f"Value error: {e}")
else:
    print("No exceptions occurred.")
finally:
    print("This will always be executed.")

4. 예외 로그

  • 로깅 모듈을 사용하여 예외를 기록합니다.
  • 로깅은 최종 사용자에게 오류를 공개하지 않고 프로덕션 문제를 진단하는 데 도움이 됩니다.
import logging

logging.basicConfig(level=logging.ERROR)

try:
    # Code that might raise an exception
except Exception as e:
    logging.error(f"An error occurred: {e}")

5. 필요할 때 예외를 다시 발생시키세요

  • 예외를 포착했지만 완전히 처리할 수 없는 경우 다른 곳에서 처리할 수 있도록 다시 발생시키는 것이 좋습니다.
try:
    # Code that might raise an exception
except ValueError as e:
    logging.error(f"Value error: {e}")
    raise  # Re-raise the exception

6. 리소스 관리를 위해 컨텍스트 관리자를 사용하세요

  • 컨텍스트 관리자(문 포함)를 사용하여 파일, 소켓 또는 데이터베이스 연결과 같은 리소스를 관리합니다.
  • 이렇게 하면 예외가 발생하더라도 리소스가 적절하게 해제됩니다.
with open('file.txt', 'r') as file:
    content = file.read()

7. 우아한 저하

-애플리케이션이 충돌하도록 허용하는 대신 대체 메커니즘이나 사용자에게 친숙한 오류 메시지를 제공하세요.

  • 예를 들어 구성 파일이 누락된 경우 대신 기본 설정을 사용할 수 있습니다.
try:
    with open('config.json', 'r') as file:
        config = json.load(file)
except FileNotFoundError:
    print("Config file not found, using defaults.")
    config = {"default": "value"}

8. 예외를 삼키지 마십시오

  • 아무 조치도 취하지 않고 예외를 포착하지 마세요.
  • 예외를 무시하면 버그가 숨겨지고 애플리케이션이 예상치 못한 동작을 하게 될 수 있습니다.
try:
    # Code that might raise an exception
except Exception as e:
    pass  # Bad practice - you're ignoring the error

9. 문서 예외사항

  • 독스트링을 사용하여 함수에서 발생할 수 있는 예외를 문서화하세요.
  • 이는 다른 개발자가 예상되는 예외와 이를 처리하는 방법을 이해하는 데 도움이 됩니다.
def divide(a, b):
    """
    Divides two numbers.

    :param a: Numerator.
    :param b: Denominator.
    :return: The result of the division.
    :raises ZeroDivisionError: If the denominator is zero.
    """
    if b == 0:
        raise ZeroDivisionError("Cannot divide by zero.")
    return a / b

10. 적절한 경우 사용자 정의 예외를 사용하십시오.

  • 애플리케이션의 특정 오류 조건을 나타내는 사용자 정의 예외를 만듭니다.
  • 이렇게 하면 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만들 수 있습니다.
class InvalidInputError(Exception):
    """Exception raised for invalid inputs."""
    pass

def process_input(value):
    if not isinstance(value, int):
        raise InvalidInputError("Input must be an integer.")
    return value * 2

11. 테스트 예외 처리

  • 예외 처리가 예상대로 작동하는지 확인하는 테스트를 작성하세요.
  • unittest 또는 pytest와 같은 프레임워크를 사용하여 일반 사례와 예외 사례를 모두 테스트합니다.
def test_divide():
    assert divide(10, 2) == 5
    with pytest.raises(ZeroDivisionError):
        divide(10, 0)

12. 예외를 남용하지 마세요

예외적인 경우에 예외 사용:

  • 예외는 일반적인 제어 흐름 메커니즘이 아니라 예상치 못한 상황에 사용해야 합니다.
  • 예를 들어 루프 종료와 같은 예측 가능한 조건을 처리하기 위해 예외를 사용하지 마세요.
# Bad practice: using exceptions for control flow
try:
    while True:
        value = next(iterator)
except StopIteration:
    pass  # End of iteration

13. 컨텍스트에 대한 체인 예외

  • Python을 사용하면 새 예외가 발생할 때 원래 컨텍스트를 보존하기 위해 예외를 연결할 수 있습니다.
  • 관련 예외를 연결하려면 from을 사용하세요.
try:
    result = process_input(input_value)
except InvalidInputError as e:
    raise ValueError("Failed to process input") from e

이러한 모범 사례를 따르면 오류를 적절하게 관리하고 애플리케이션의 안정성을 향상시키는 더욱 강력하고 유지 관리가 가능하며 읽기 쉬운 예외 처리 코드를 작성할 수 있습니다.


자원

  • 예외 처리에 관한 Python의 공식 문서
  • Python의 로깅 모듈 문서
  • PEP 8 - Python 코드용 스타일 가이드(예외를 포함한 일반적인 코딩 관행용)
  • 실제 Python - 예외 처리
릴리스 선언문 이 기사는 https://dev.to/kyotanakada/best-practices-for-implementing-Exception-handling-in-python-1ni1?1에 복제되어 있습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3