Как отключить предупреждения python

Я работаю с кодом, который выдает много (для меня на данный момент) бесполезных предупреждений, используя библиотеку warnings. Читая (/сканируя) документацию, я нашел только способ отключить предупреждения для отдельных функций. Но я не хочу так сильно менять код.

Есть ли такой флаг, как python -no-warning foo.py?

Чтобы вы посоветовали?

Ответ 2

Вы смотрели раздел подавления предупреждений в документации по Python?

Если вы используете код, который, как вы знаете, вызовет предупреждение, такое как устаревшая функция, но не хочет видеть предупреждение, то можно подавить предупреждение с помощью диспетчера контекста 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

Ответ 3

Вы также можете определить переменную среды (новая функция в 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')
>>> 

Ответ 4

Это старый вопрос, но в PEP 565 есть некоторые новые указания, что для отключения всех предупреждений, если вы пишете приложение на Python, вы должны использовать:

import sys
import warnings

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

Причина, по которой это рекомендуется, заключается в том, что он отключает все предупреждения по умолчанию, но крайне важно python -W включение через python -W в командной строке или PYTHONWARNINGS.

Ответ 5

Если вы не хотите что-то сложное, то:

import warnings
warnings.filterwarnings("ignore", category=FutureWarning)

Ответ 6

предупреждения выводятся через stderr, а простое решение - добавить в CLI "2 > /dev/null". это имеет большой смысл для многих пользователей, таких как те, у которых есть centos 6, которые застряли с зависимостями python 2.6 (например, yum), и различные модули подталкиваются к краю исчезновения в своем охвате.

это особенно справедливо для криптографии с участием SNI et cetera. можно обновить 2.6 для обработки HTTPS, используя proc: https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2

предупреждение все еще на месте, но все, что вам нужно, обратно портировано. перенаправление stderr оставит вас с чистым выходом терминала/оболочки, хотя сам контент stdout не изменится.

отвечает на FriendFX. предложение 1 (1) напрямую отвечает на проблему с помощью универсального решения. предложение two (2) учитывает приведенные анкеры re 'disable warnings', которые являются специфическими для python 2.6, и отмечает, что пользователи RHEL/centos 6 не могут напрямую обойтись без 2.6. хотя никаких конкретных предупреждений не упоминалось, параграф 2 (2) отвечает на вопрос 2.6, который я чаще всего получаю в коротких замыканиях в модуле криптографии, и о том, как можно "модернизировать" (т.е. обновить, выполнить резервное копирование, исправить) производительность Python HTTPS/TLS, пункт 3 (3) просто объясняет результат использования перенаправления и обновления модуля/зависимостей.

Ответ 7

Если вы знаете, с какими бесполезными предупреждениями вы обычно сталкиваетесь, вы можете отфильтровать их по сообщениям.

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")

Ответ 8

Вы можете использовать этот код в верхней части main.py:

def warn(*args, **kwargs):
    pass
import warnings
warnings.warn = warn