차이점은 무엇이고 warnings.warn()
그리고 logging.warn()
그들이 사용되어야한다 그들이 무엇 측면에서 방법은?
차이점은 무엇이고 warnings.warn()
그리고 logging.warn()
그들이 사용되어야한다 그들이 무엇 측면에서 방법은?
답변:
하나는 원하는대로 포착하거나 무시할 수있는 예외를 발생시키고 다른 하나는 선택적으로 현재 로깅 수준을 기반으로 로그에 항목을 추가합니다. 하나는 코드의 다양한 사항에 대해 경고 할 때 사용하고 다른 하나는 로깅 할 때 사용해야합니다.
logging.captureWarnings()
). 경고 메시지는 @cxrodgers가 사용자에게 코드를 변경하라고 설명했듯이 기본적으로 한 번만 표시됩니다. 다른 사람에 로그온하고 모든 경고를 문서화하지만 자세히 표시 할 내용을 구성 할 수 있습니다. 경고는`-W error '를 사용하여 예외에 대해 발생할 수 있습니다.
warnings
또는 logging
?
나는 다른 답변에 동의합니다- 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")
>>>