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


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

может быть, флаг, как python -no-warning foo.py?

что бы вы порекомендовали?

6 211

6 ответов:

здесь опции-W.

python -W ignore foo.py

вы смотрели на отключить предупреждения раздел документов python?

Если вы используете код, который, как вы знаете, вызовет предупреждение, такое как устаревшая функция, но не хотите видеть предупреждение, то можно подавить предупреждение с помощью контекстного менеджера catch_warnings:

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

Я не потворствую этому, но вы могли бы просто переплюнуть все предупреждения с этим:

import warnings
warnings.filterwarnings("ignore")

Ex:

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

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

import sys
import warnings

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

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

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

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

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

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

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

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