warnings
라이브러리를 사용하여 (현재로서는) 쓸모없는 경고를 많이 던지는 코드로 작업하고 있습니다. 설명서 읽기 (/ 스캔) 단일 기능에 대한 경고를 비활성화 하는 방법 만 찾았습니다 . 그러나 코드를 너무 많이 변경하고 싶지 않습니다.
아마도 같은 깃발이 python -no-warning foo.py
있습니까?
무엇을 추천하나요?
warnings
라이브러리를 사용하여 (현재로서는) 쓸모없는 경고를 많이 던지는 코드로 작업하고 있습니다. 설명서 읽기 (/ 스캔) 단일 기능에 대한 경고를 비활성화 하는 방법 만 찾았습니다 . 그러나 코드를 너무 많이 변경하고 싶지 않습니다.
아마도 같은 깃발이 python -no-warning foo.py
있습니까?
무엇을 추천하나요?
답변:
파이썬 문서의 경고 억제 섹션을 보셨습니까 ?
더 이상 사용되지 않는 함수와 같이 경고를 발생시키는 것으로 알고 있지만 경고를보고 싶지 않은 경우 catch_warnings 컨텍스트 관리자를 사용하여 경고를 억제 할 수 있습니다.
import warnings
def fxn():
warnings.warn("deprecated", DeprecationWarning)
with warnings.catch_warnings():
warnings.simplefilter("ignore")
fxn()
나는 그것을 용납하지 않지만 다음 과 같이 모든 경고 를 억제 할 수 있습니다 .
import warnings
warnings.filterwarnings("ignore")
전의:
>>> import warnings
>>> def f():
... print('before')
... warnings.warn('you are warned!')
... print('after')
>>> f()
before
__main__:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
category
인수를 사용하여 경고를 전달할 수 있습니다 .warnings.filterwarnings("ignore", category=DeprecationWarning)
warnings.filterwarnings
함수에 유용한 매개 변수도 있습니다 module
. 지정된 모듈의 경고를 무시할 수 있습니다.
환경 변수를 정의 할 수도 있습니다 (2010의 새로운 기능-python 2.7)
export PYTHONWARNINGS="ignore"
다음과 같이 테스트하십시오 : 기본값
$ export PYTHONWARNINGS="default"
$ python
>>> import warnings
>>> warnings.warn('my warning')
__main__:1: UserWarning: my warning
>>>
경고 무시
$ export PYTHONWARNINGS="ignore"
$ python
>>> import warnings
>>> warnings.warn('my warning')
>>>
더 이상 사용되지 않는 경고의 경우 더 이상 사용되지 않는 사용 중지 경고를 파이썬에서 살펴보십시오.
여기에 복사했습니다 ...
warnings
모듈 문서에서 :
#!/usr/bin/env python -W ignore::DeprecationWarning
Windows를 사용하는 경우 : -W ignore::DeprecationWarning
Python에 인수로 전달하십시오 . int 로 캐스팅하여 문제를 해결하는 것이 좋습니다.
(Python 3.2에서는 지원 중단 경고가 기본적으로 무시됩니다.)
또는:
import warnings
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=DeprecationWarning)
import md5, sha
yourcode()
이제 당신은 여전히 다른 모든 것을 얻지 DeprecationWarning
만 다음으로 인한 것은 얻지 못합니다.
import md5, sha
tox
, 추가 PYTHONWARNINGS=ignore
로 setenv
차종 출력 덜 더러운.
이것은 오래된 질문이지만 PEP 565 에는 파이썬 응용 프로그램을 작성하는 경우 모든 경고를 해제하는 새로운 지침 이 있습니다.
import sys
import warnings
if not sys.warnoptions:
warnings.simplefilter("ignore")
이것이 권장되는 이유는 기본적으로 모든 경고를 끄지 만 python -W
명령 줄 또는 을 통해 경고를 다시 켤 수 있기 때문 PYTHONWARNINGS
입니다.
복잡한 것을 원하지 않으면 다음을 수행하십시오.
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
warnings.filterwarnings("default", category=FutureWarning)
일반적으로 발생하는 쓸모없는 경고가 무엇인지 알고 있으면 메시지별로 필터링 할 수 있습니다.
import warnings
#ignore by message
warnings.filterwarnings("ignore", message="divide by zero encountered in divide")
#part of the message is also okay
warnings.filterwarnings("ignore", message="divide by zero encountered")
warnings.filterwarnings("ignore", message="invalid value encountered")
나는 이것이 상황의 틈새에만 적용 할 수 있다는 것을 알고 있지만 numpy
실제로 사용하는 것을 좋아합니다 np.errstate
.
np.sqrt(-1)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan
그러나 다음을 사용하십시오 np.errstate
.
with np.errstate(invalid='ignore'):
np.sqrt(-1)
nan
가장 중요한 부분은이를 매우 구체적인 코드 줄에만 적용 할 수 있다는 것입니다.
경고는 stderr을 통해 출력되며 간단한 해결책은 CLI에 '2> / dev / null'을 추가하는 것입니다. 이것은 python 2.6 의존성 (yum과 같은)에 갇혀 있고 다양한 모듈이 적용 범위에서 멸종 위기에 처한 centos 6 사용자와 같은 많은 사용자에게 의미가 있습니다.
이는 특히 SNI 등의 암호화에 적용됩니다. https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2 의 proc을 사용하여 HTTPS 처리를 위해 2.6을 업데이트 할 수 있습니다
경고는 여전히 존재하지만 원하는 모든 것은 백 포트됩니다. stdout 내용 자체는 변경되지 않지만 stderr의 리디렉션은 깨끗한 터미널 / 쉘 출력으로 남겨 둡니다.
FriendFX에 응답합니다. 문장 하나 (1)는 보편적 인 해결책으로 문제에 직접 응답합니다. 문장 2 (2)는 python 2.6에 특화된 인용 된 '비활성화 경고'를 고려하고 RHEL / centos 6 사용자는 2.6 없이는 직접 수행 할 수 없습니다. 구체적인 경고가 언급되지 않았지만, 2 번 문단은 암호화 모듈의 단점을 가장 많이받는 2.6 질문과 파이썬의 HTTPS / TLS 성능을 "현대화"(즉, 업그레이드, 백 포트, 수정)하는 방법에 대해 자주 대답합니다. . 3 항 (3)은 단지 리디렉션을 사용하고 모듈 / 의존성을 업그레이드 한 결과를 설명합니다.
FutureWarning: This search is broken in 1.3 and earlier, and will be fixed in a future version. If you rely on the current behaviour, change it to [this other thing]
. 오히려 경고를 무시하고 무해한 경고를 피하기 위해 불필요하게 추악한 코드를 작성하는 것보다 자동으로 수정되기를 기다립니다.