[python] 파이썬 경고를 비활성화하는 방법

warnings라이브러리를 사용하여 (현재로서는) 쓸모없는 경고를 많이 던지는 코드로 작업하고 있습니다. 설명서 읽기 (/ 스캔) 단일 기능에 대한 경고를 비활성화 하는 방법 만 찾았습니다 . 그러나 코드를 너무 많이 변경하고 싶지 않습니다.

아마도 같은 깃발이 python -no-warning foo.py있습니까?

무엇을 추천하나요?



답변

있다 -W 옵션 .

python -W ignore 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


답변

환경 변수를 정의 할 수도 있습니다 (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::DeprecationWarningPython에 인수로 전달하십시오 . int 로 캐스팅하여 문제를 해결하는 것이 좋습니다.

(Python 3.2에서는 지원 중단 경고가 기본적으로 무시됩니다.)

또는:

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings("ignore", category=DeprecationWarning)
    import md5, sha

yourcode()

이제 당신은 여전히 ​​다른 모든 것을 얻지 DeprecationWarning만 다음으로 인한 것은 얻지 못합니다.

import md5, sha


답변

이것은 오래된 질문이지만 PEP 565 에는 파이썬 응용 프로그램을 작성하는 경우 모든 경고를 해제하는 새로운 지침 이 있습니다.

import sys
import warnings

if not sys.warnoptions:
    warnings.simplefilter("ignore")

이것이 권장되는 이유는 기본적으로 모든 경고를 끄지 만 python -W명령 줄 또는 을 통해 경고를 다시 켤 수 있기 때문 PYTHONWARNINGS입니다.


답변

복잡한 것을 원하지 않으면 다음을 수행하십시오.

import warnings
warnings.filterwarnings("ignore", 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

가장 중요한 부분은이를 매우 구체적인 코드 줄에만 적용 할 수 있다는 것입니다.