Как отключить предупреждения python
Я работаю с кодом с бросками много (для меня на данный момент) бесполезные предупреждения с помощью warnings
библиотека. Чтение (/сканирование) документации я только нашел способ отключить предупреждения для отдельных функций. Но я не хочу так сильно менять код.
может быть, есть флаг, как python -no-warning foo.py
?
что бы вы порекомендовали?
6 ответов
вы смотрели на отключить предупреждения раздел документов 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) непосредственно отвечает на проблему универсальным решением. предложение два (2) учитывает цитируемый якорь re "отключить предупреждения", который является python 2.6 конкретным и отмечает, что пользователи RHEL/centos 6 не могут напрямую обойтись без 2.6. хотя никаких конкретных предупреждений не приводилось, пункт 2 (2) отвечает на вопрос 2.6, который я чаще всего получаю в модуле криптографии и как можно "модернизировать" (т. е. обновить, backport, fix) производительность HTTPS/TLS python. в пункте 3 (3) просто разъясняются результаты использования повторного направления и обновления модуля/зависимостей.
вы можете использовать этот код в верхней части main.py:
def warn(*args, **kwargs):
pass
import warnings
warnings.warn = warn