차이점은 무엇이고 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")
>>>