[python] warnings.warn () 대 logging.warning ()

차이점은 무엇이고 warnings.warn()그리고 logging.warn()그들이 사용되어야한다 그들이 무엇 측면에서 방법은?



답변

하나는 원하는대로 포착하거나 무시할 수있는 예외를 발생시키고 다른 하나는 선택적으로 현재 로깅 수준을 기반으로 로그에 항목을 추가합니다. 하나는 코드의 다양한 사항에 대해 경고 할 때 사용하고 다른 하나는 로깅 할 때 사용해야합니다.


답변

나는 다른 답변에 동의합니다- logging로깅 및 warning경고-그러나 더 자세한 내용을 추가하고 싶습니다.

다음은 logging모듈 사용 단계를 안내하는 튜토리얼 스타일의 HOWTO 입니다.
https://docs.python.org/3/howto/logging.html

귀하의 질문에 직접 답변합니다.

문제를 피할 수 있고 경고를 제거하기 위해 클라이언트 애플리케이션을 수정해야하는 경우 라이브러리 코드의 warnings.warn ()

logging.warning () 클라이언트 응용 프로그램이 상황에 대해 수행 할 수있는 작업이없는 경우에도 이벤트를 기록해야합니다.


답변

logging.warning단지에서 뭔가 기록 WARNING같은 방식으로, 레벨이 logging.info상기 로그 INFO레벨 및 logging.error상기 로그 ERROR수준. 특별한 행동이 없습니다.

warnings.warn방출되는 정확한 하위 클래스와 경고 필터를 구성한 방법 에 따라에 Warning인쇄 stderr되거나, 완전히 무시되거나, 정상적인 것처럼 Exception(애플리케이션 충돌 가능성이 있음) 던질 수있는를 Warning방출합니다 . 기본적으로 경고는 인쇄 되거나 무시됩니다.stderr

에서 내 보낸 경고 warnings.warn는 알아두면 유용하지만 놓치기 쉽습니다 (특히 캡처하지 않고 백그라운드 프로세스에서 Python 프로그램을 실행하는 경우 stderr). 이러한 이유로 기록하는 것이 도움이 될 수 있습니다.

Python 은이를 수행 할 수 있도록 logging모듈과 모듈 간의 내장 통합을 제공합니다 warnings. logging.captureWarnings(True)스크립트 시작시 호출하기 만하면 warnings모듈에서 내 보낸 모든 경고 가 자동으로 레벨에 기록됩니다 WARNING.


답변

공식 문서표준 설명 외에

문제를 피할 수 있고 경고를 제거하기 위해 클라이언트 애플리케이션을 수정해야하는 경우 라이브러리 코드의 warnings.warn ()

logging.warning () 클라이언트 응용 프로그램이 상황에 대해 수행 할 수있는 작업이없는 경우에도 이벤트를 기록해야합니다.

기본적으로 warnings.warn("same message")한 번만 표시 된다는 점도 주목할 가치가 있습니다 . 그것은 큰 눈에 띄는 차이입니다. 공식 문서 에서 인용

동일한 소스 위치에 대한 특정 경고의 반복은 일반적으로 억제됩니다.

>>> import warnings
>>> warnings.warn("foo")
__main__:1: UserWarning: foo
>>> warnings.warn("foo")
>>> warnings.warn("foo")
>>>
>>> import logging
>>> logging.warn("bar")
WARNING:root:bar
>>> logging.warn("bar")
WARNING:root:bar
>>> logging.warn("bar")
WARNING:root:bar
>>>
>>>
>>> warnings.warn("fur")
__main__:1: UserWarning: fur
>>> warnings.warn("fur")
>>> warnings.warn("fur")
>>>


답변