Python이 예외 처리 및 로깅을 수행하는 방법에 대한 실제 토론

이 기사 는 Lemony Hug가 작성한 Huawei 클라우드 커뮤니티 " 강력하고 안정적인 애플리케이션 구축을 위한 Python 예외 처리 및 로깅 " 에서 공유되었습니다 .

예외 처리 및 로깅은 안정적이고 유지 관리가 쉬운 소프트웨어 애플리케이션을 작성하는 데 필수적인 구성 요소입니다. Python은 강력한 예외 처리 메커니즘과 유연한 로깅 기능을 제공하므로 개발자가 코드 오류를 보다 쉽게 ​​관리하고 애플리케이션의 실행 프로세스를 추적할 수 있습니다. 이 기사에서는 Python의 예외 처리 및 로깅에 대한 모범 사례와 이러한 개념을 설명하는 몇 가지 사례 코드를 살펴보겠습니다.

예외 처리의 중요성

예외 처리란 프로그램 실행 중 발생할 수 있는 오류나 비정상적인 상황을 처리하는 과정을 말한다. 좋은 예외 처리는 우리에게 다음과 같은 도움을 줄 수 있습니다.

  • 프로그램 안정성 향상: 예외를 포착하고 처리함으로써 예상치 못한 프로그램 충돌을 방지하고 애플리케이션 안정성을 향상할 수 있습니다.
  • 사용자 경험 향상: 프로그램에 오류가 발생하면 친숙한 오류 메시지와 처리를 통해 사용자 경험을 개선하고 프로그램에 대한 사용자의 나쁜 인상을 피할 수 있습니다.
  • 더 쉬운 디버깅 및 유지 관리: 우수한 예외 처리는 프로그램에서 문제를 더 쉽게 찾아 해결하고 코드의 유지 관리 가능성을 향상시키는 데 도움이 됩니다.

Python의 예외 처리

Python에서는 try-Exception 문을 통해 예외 처리가 구현됩니다. 다음은 간단한 예외 처리 예입니다.

노력하다:
    # 예외를 발생시킬 수 있는 코드를 실행하려고 시도합니다.
    결과 = 10 / 0
ZeroDivisionError 제외:
    # 특정 유형의 예외를 처리합니다.
    print("0으로 나누기 오류가 발생했습니다!")

이 예에서는 10을 0으로 나눈 값을 계산하려고 시도하며 이로 인해 ZeroDivisionError 예외가 발생합니다. 그런 다음 이 예외를 포착하고 오류 메시지를 출력하기 위해 Except 절을 사용합니다. 특정 유형의 예외를 포착하는 것 외에도 except이 절을 사용하여 일반적인 오류 처리를 위한 모든 유형의 예외를 포착할 수도 있습니다.

예외를 잡는 것 외에도 elsetry 블록에서 예외가 발생하지 않을 때 특정 코드를 실행하는 절을 사용할 수도 있고, finally예외 발생 여부에 관계없이 특정 정리 코드를 실행하는 절을 사용할 수도 있습니다.

로깅의 중요성

로깅은 애플리케이션 실행 중 중요한 정보를 기록하는 기술이다. 좋은 로깅은 우리에게 다음과 같은 도움을 줍니다.

  • 애플리케이션의 실행 프로세스 추적: 주요 이벤트 및 상태 정보를 기록함으로써 애플리케이션의 실행 프로세스를 추적하고 프로그램의 동작을 이해하는 데 도움을 줄 수 있습니다.
  • 진단 및 디버깅: 프로그램에서 문제가 발생하면 로깅을 통해 문제를 신속하게 찾아 해결하는 데 도움이 되는 유용한 디버깅 정보를 얻을 수 있습니다.
  • 모니터링 및 분석: 로그 데이터를 분석함으로써 애플리케이션의 성능과 사용량을 이해할 수 있어 프로그램을 최적화하고 개선하는 데 도움이 됩니다.

Python에 로그인

Python 표준 라이브러리의 모듈은 logging강력하고 유연한 로깅 기능을 제공합니다. 이 모듈을 사용하여 로거 생성, 로그 수준 설정, 로그 형식 정의 등을 수행할 수 있습니다. 다음은 간단한 로깅 예입니다.

수입 로깅

# 로거 생성
로거 = 로깅.getLogger(__name__)
logger.setLevel(logging.INFO)

#파일 핸들러 생성
file_handler = 로깅.FileHandler('app.log')
file_handler.setLevel(logging.INFO)

#로그 형식 생성
formatter = 로깅.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(포맷터)

# 로거에 핸들러 추가
logger.addHandler(file_handler)

# 로그정보를 기록한다
logger.info('정보 로그입니다')
logger.warning('경고 로그입니다')
logger.error('오류 로그입니다')

이 예에서는 먼저 로거를 생성 logger하고 로그 수준을 INFO로 설정합니다. 그런 다음 파일 핸들러를 생성하고 file_handler해당 수준도 INFO로 설정하고 로그 형식을 정의했습니다. 마지막으로 로거에 파일 프로세서를 추가하고, logger.info(), 등의 메소드를 사용 logger.warning()하여 logger.error()다양한 수준의 로그 정보를 기록합니다.

모범 사례 예

다음은 예외 처리와 로깅을 결합한 모범 사례의 예입니다.

수입 로깅

# 로거 생성
로거 = 로깅.getLogger(__name__)
logger.setLevel(logging.INFO)

#파일 핸들러 생성
file_handler = 로깅.FileHandler('app.log')
file_handler.setLevel(logging.INFO)

#로그 형식 생성
formatter = 로깅.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(포맷터)

# 로거에 핸들러 추가
logger.addHandler(file_handler)

정의 나누기(x, y):
    노력하다:
        결과 = x / y
    ZeroDivisionError를 e로 제외:
        logger.error(f"0으로 나누기 오류: {e}")
    e와 같은 예외를 제외하고:
        logger.error(f"예외 발생: {e}")
    또 다른:
        logger.info(f"결과: {결과}")
    마지막으로:
        logger.info("작업이 종료되었습니다")

# 테스트 기능
나누기(10, 2)
나누기(10, 0)

이 예에서는 divide()두 숫자의 몫을 계산하는 함수를 정의합니다. 함수 내에서 try-Exception 문을 사용하여 가능한 0으로 나누기 오류를 포착하고 로거를 사용하여 예외 정보를 기록합니다. 함수 실행이 끝나면 finally절을 사용하여 작업 종료에 대한 정보를 기록합니다.

예외 처리 및 로깅에 Python을 사용하는 방법을 더 잘 이해하고 이러한 모범 사례를 실제 프로젝트에 적용합니다. 실제 개발에서는 기본적인 예외 처리 및 로깅 외에도 프로젝트의 특성과 요구 사항에 따라 다음과 같이 보다 복잡한 구성 및 최적화를 수행할 수도 있습니다.

  • 사용자 정의 예외 클래스 사용 : Python에 내장된 예외 유형 외에도 예외 정보를 더 잘 구성하고 관리하기 위해 자체 예외 클래스를 정의할 수도 있습니다.
  • 로그 수준의 유연한 사용 : 애플리케이션의 다양한 부분과 요구 사항에 따라 로거 수준을 유연하게 조정하여 다양한 환경에서 디버깅 및 모니터링할 수 있습니다.
  • 로그의 계층적 기록 : 로그는 다양한 수준의 로깅 방법을 사용하는 것 외에도 후속 분석 및 처리를 위해 로그 메시지의 중요성과 유형을 기반으로 다양한 파일이나 데이터 소스에 기록될 수도 있습니다.
  • 타사 로그 서비스 통합 : 대규모 프로젝트 또는 분산 시스템의 경우 타사 로그 서비스(예: ELK Stack, Splunk 등)를 통합하여 보다 고급 로그 관리 및 모니터링 기능을 달성하는 것을 고려할 수 있습니다.

요약하자면, 예외 처리 및 로깅은 Python 애플리케이션 개발에 없어서는 안 될 중요한 구성 요소입니다. Python에서 제공하는 예외 처리 메커니즘과 로깅 기능을 합리적으로 사용하고 프로젝트의 실제 상황에 따라 유연하게 구성 및 최적화함으로써 보다 강력하고 안정적인 소프트웨어 애플리케이션을 작성하고 사용자 경험을 개선하며 오류 비용을 줄일 수 있습니다. 발생 및 처리를 통해 프로젝트의 성공적인 납품과 운영, 유지를 강력하게 지원합니다.

실제 프로젝트에서 예외 처리 및 로깅의 효율성과 유지 관리성을 더욱 향상시킬 수 있는 몇 가지 추가 팁과 모범 사례는 다음과 같습니다.

컨텍스트 관리자 사용

컨텍스트 관리자는 리소스의 올바른 할당 및 해제를 보장하는 Python의 우아한 리소스 관리 도구입니다. 컨텍스트 관리자와 예외 처리를 결합하면 리소스를 더 잘 관리하고 리소스 누출 및 예상치 못한 오류를 방지할 수 있습니다. 예를 들어 with다음 명령문을 사용하여 파일 작업을 관리할 수 있습니다.

노력하다:
    open('file.txt', 'r')을 f로 사용:
        내용 = f.read()
FileNotFoundError 제외:
    logger.error('파일이 존재하지 않습니다')
e와 같은 예외를 제외하고:
    logger.error(f'예외 발생: {e}')

데코레이터 사용

데코레이터는 함수 실행 전후에 추가 논리를 추가하는 데 사용할 수 있는 Python의 강력한 기능입니다. 데코레이터를 사용자 정의함으로써 통합된 예외 처리 및 로깅 논리를 구현하고 각 함수에서 유사한 코드를 반복적으로 작성하는 것을 피할 수 있습니다. 예를 들어 함수 실행 시간과 예외 정보를 기록하는 데코레이터를 작성할 수 있습니다.

수입 시간

def log_Exceptions(func):
    def 래퍼(*args, **kwargs):
        노력하다:
            start_time = 시간.시간()
            결과 = func(*args, **kwargs)
            end_time = 시간.시간()
            logger.info(f"{func.__name__} 실행 시간: {end_time - start_time} 초")
            결과 반환
        e와 같은 예외를 제외하고:
            logger.error(f"{func.__name__} 함수에서 예외가 발생했습니다: {e}")
    반환 포장지

@log_Exceptions
def some_function():
    # 함수 로직
    통과하다

오류 코드와 결합

복잡한 애플리케이션에서는 오류 코드를 사용하여 다양한 유형의 오류를 식별하여 예외 정보를 더 잘 구성하고 관리할 수 있습니다. 일련의 오류 코드와 해당 오류 메시지를 정의하면 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만들 수 있습니다. 예를 들어:

ERROR_CODE_DIVIDE_BY_ZERO = 1001
ERROR_CODE_FILE_NOT_FOUND = 1002

정의 나누기(x, y):
    노력하다:
        결과 = x / y
    ZeroDivisionError 제외:
        logger.error(f"0으로 나누기 오류: {e}", extra={'error_code': ERROR_CODE_DIVIDE_BY_ZERO})
    FileNotFoundError 제외:
        logger.error(f"파일을 찾을 수 없습니다: {e}", extra={'error_code': ERROR_CODE_FILE_NOT_FOUND})

타사 로깅 라이브러리 사용

Python 표준 라이브러리의 로깅 모듈 외에도 Loguru, structlog 등과 같이 선택할 수 있는 우수한 타사 로깅 라이브러리가 많이 있습니다. 이러한 라이브러리는 보다 풍부한 기능과 보다 친숙한 API를 제공하며 실제 필요에 따라 로깅에 적합한 라이브러리를 선택할 수 있습니다.

명확한 로그 수준 정책 정의

로깅 시스템을 설계할 때 로그 정보의 정확성과 가독성을 보장하기 위해 명확한 로그 수준 정책을 정의해야 합니다. 일반적으로 DEBUG, INFO, WARNING, ERROR 및 CRITICAL과 같은 로그 메시지의 중요성과 긴급성을 기반으로 다양한 로그 수준을 정의할 수 있습니다. 일상적인 개발에서는 로그 정보가 너무 장황하지도 않고 중요한 정보가 손실되지도 않도록 특정 상황에 따라 적절한 로그 수준을 사용해야 합니다.

국제화 및 현지화 요구 사항 고려

글로벌 사용자를 대상으로 하는 애플리케이션의 경우 국제화 및 지역화 요구 사항을 고려해야 하며, 다양한 언어 환경에서 로그 정보의 가독성과 일관성을 보장하기 위해 로그 레코드에 표준 국제화 텍스트 및 형식 지정 방법을 사용해야 합니다. 동시에 로그 정보를 더 잘 이해하고 분석하려면 다양한 시간대와 지역의 시간 형식과 습관도 고려해야 합니다.

로그 순환 및 보관 구현

장기 실행 애플리케이션에서는 로그 파일이 지속적으로 증가하여 많은 양의 디스크 공간을 차지할 수 있습니다. 이러한 상황을 방지하려면 로그 회전 및 보관 기능을 구현하고 오래된 로그 파일을 정기적으로 정리 및 압축하여 저장 공간을 절약하고 로그 정보에 대한 접근성을 보장할 수 있습니다. Python의 타사 라이브러리(예: LogRotate)를 사용하여 로그 회전 및 보관 기능을 구현하거나 프로젝트 필요에 따라 직접 구현할 수 있습니다.

모니터링 및 경보 시스템 통합

프로덕션 환경에서는 적시에 예외를 감지하고 처리하는 것이 중요합니다. 따라서 모니터링 및 경고 시스템을 결합하여 로그 정보를 실시간으로 모니터링하고 경고할 수 있습니다. 로그 기록에 키워드와 식별자를 추가하고 이를 모니터링하는 모니터링 시스템을 구축함으로써 이상 상황을 적시에 발견하고 이에 대한 조치를 취하여 애플리케이션의 안정적인 운영을 보장할 수 있습니다.

지속적인 개선 및 최적화

예외 처리 및 로깅은 지속적인 개선 프로세스이므로 기존 예외 처리 및 로깅 전략을 정기적으로 검토하고 최적화하여 프로젝트 개발 및 변경 사항에 적응해야 합니다. 로그 기록을 정기적으로 분석하고 계산하여 잠재적인 문제와 최적화 공간을 발견할 수 있으며, 예외 처리 및 로깅을 위한 프로세스와 메커니즘을 적시에 조정하고 개선하여 애플리케이션의 안정성과 유지 관리성을 향상시킬 수 있습니다.

위의 팁과 모범 사례를 통해 예외 처리 및 로깅을 위해 Python을 더 잘 적용하고 실제 프로젝트에서 강력하고 안정적인 소프트웨어 애플리케이션을 구축할 수 있습니다. 예외 처리 및 로깅은 소프트웨어 개발 프로세스에서 중요한 링크로, 문제를 찾아 해결하는 데 도움이 될 뿐만 아니라 코드의 유지 관리성과 가독성을 향상시켜 프로젝트의 성공적인 전달 및 운영을 위한 강력한 지원을 제공합니다.

요약하다

예외 처리 및 로깅은 Python 애플리케이션 개발에 없어서는 안 될 중요한 구성 요소입니다. 이 기사의 소개와 자세한 논의를 통해 우리는 예외 처리 및 로깅을 위해 Python을 사용하는 모범 사례를 조사하고 개발자가 이러한 중요한 개념을 더 잘 이해하고 적용하는 데 도움이 되는 풍부한 사례 코드와 기술을 제공합니다.

예외 처리 측면에서는 try-Exception 문을 사용하여 발생할 수 있는 예외를 포착하고 처리하는 방법을 배웠고, else 절과 finally 절을 사용하여 관련 정리 작업을 수행하는 방법에 대해 논의했습니다. 또한 컨텍스트 관리자 및 데코레이터와 같은 고급 기술을 결합하여 예외 처리의 효율성과 유지 관리성을 더욱 향상시키는 방법도 살펴보았습니다.

로깅 측면에서는 Python 표준 라이브러리의 로깅 모듈을 심층적으로 살펴보고 로거 생성 방법, 로그 수준 설정, 로그 형식 및 기타 기본 작업을 정의하는 방법을 배웠습니다. 또한 프로젝트 요구 사항에 따라 다양한 로그 수준과 로깅 방법을 사용하는 방법, 오류 코드 및 타사 로그 라이브러리와 같은 기술을 결합하여 보다 유연하고 효율적인 로깅 기능을 달성하는 방법에 대해서도 논의했습니다.

기본적인 예외 처리 및 로깅 외에도 명확한 로그 수준 정책 정의, 국제화 및 지역화 요구 사항 고려, 로그 회전 및 보관 구현, 모니터링 및 경고 시스템 결합 등과 같은 일련의 고급 팁 및 모범 사례도 살펴봅니다. 이러한 기술과 사례는 개발자가 복잡한 프로젝트 요구 사항과 실제 상황에 더 잘 대처하고 코드의 품질과 유지 관리성을 향상시키는 데 도움이 될 수 있습니다.

즉, 예외 처리 및 로깅의 모범 사례를 적절하게 적용함으로써 강력하고 안정적인 Python 애플리케이션을 작성하고, 사용자 경험을 개선하고, 오류 발생 및 처리 비용을 줄이고, 프로젝트의 성공적인 전달 및 운영을 위한 강력한 지원을 제공할 수 있습니다. 향후 개발 작업에서 우리는 애플리케이션의 안정성과 유지 관리성을 보장하고 사용자에게 더 나은 서비스와 경험을 제공하기 위해 예외 처리 및 로깅에 계속 주의를 기울이고 지속적으로 최적화해야 합니다.

화웨이 클라우드의 신기술에 대해 빨리 알아보고 팔로우하려면 클릭하세요~

 

오픈 소스 Hongmeng을 포기하기로 결정했습니다 . 오픈 소스 Hongmeng의 아버지 Wang Chenglu: 오픈 소스 Hongmeng은 중국에서 유일하게 기초 소프트웨어 분야의 건축 혁신 산업 소프트웨어 행사입니다. OGG 1.0이 출시되고 Huawei는 모든 소스 코드를 제공합니다. 구글 리더가 '코드 똥산'에 죽는다 페도라 리눅스 40 정식 출시 전 마이크로소프트 개발자: 윈도우 11 성능이 ' 어처구니없을 정도로 나쁨' 마화텡과 저우홍이가 악수하며 '원한 해소' ​​유명 게임사들이 새로운 규정 발표 : 직원 결혼 선물은 100,000위안을 초과할 수 없습니다. Ubuntu 24.04 LTS 공식 출시 Pinduoduo는 부정 경쟁 혐의로 판결을 받았습니다. 보상금 500만 위안
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/4526289/blog/11054810