Ответ 1
Здесь - вариант W.
python -W ignore foo.py
Я работаю с кодом, который выдает много (для меня на данный момент) бесполезных предупреждений, используя библиотеку warnings
. Читая (/сканируя) документацию, я нашел только способ отключить предупреждения для отдельных функций. Но я не хочу так сильно менять код.
Есть ли такой флаг, как python -no-warning foo.py
?
Чтобы вы посоветовали?
Здесь - вариант 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")
Пример:
>>> 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')
>>>
Это старый вопрос, но в PEP 565 есть некоторые новые указания, что для отключения всех предупреждений, если вы пишете приложение на Python, вы должны использовать:
import sys
import warnings
if not sys.warnoptions:
warnings.simplefilter("ignore")
Причина, по которой это рекомендуется, заключается в том, что он отключает все предупреждения по умолчанию, но крайне важно python -W
включение через python -W
в командной строке или PYTHONWARNINGS
.
Если вы не хотите что-то сложное, то:
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
предупреждения выводятся через 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) просто объясняет результат использования перенаправления и обновления модуля/зависимостей.
Если вы знаете, с какими бесполезными предупреждениями вы обычно сталкиваетесь, вы можете отфильтровать их по сообщениям.
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")
Вы можете использовать этот код в верхней части main.py:
def warn(*args, **kwargs):
pass
import warnings
warnings.warn = warn