Как вы подавляете Python DeprecationWarnings на Linux Terminal? - PullRequest
3 голосов
/ 17 июня 2010

Я установил i18ndude (утилита интернационализации, которая будет использоваться в Plone), используя easy_install.

Когда я пытаюсь запустить утилиту i18ndude на своем терминале, я получаю:

/usr/local/lib/python2.6/dist-packages/i18ndude-3.1.2-py2.6.egg/i18ndude/odict.py:7: DeprecationWarning: object.__init__() takes no parameters
  dict.__init__(self, dict)

Как подавить эти предупреждающие сообщения при вызове утилиты из командной строки? Является ли это возможным? Теоретически я знаю, что должен установить другой интерпретатор Python и вызвать из него i18ndude, но я бы хотел более простой подход (например, параметр или что-то подобное).

Кстати, я использую скрипт i18ndude с официального сайта Plone .

Ответы [ 4 ]

4 голосов
/ 17 июня 2010

Если вы работаете как скрипт, вы можете использовать:

#!/usr/bin/env python -W ignore::DeprecationWarning
4 голосов
/ 17 июня 2010

Перенаправление может использоваться, но оно подавит все сообщения, отправленные в этот «поток»;например,

i178ndude 2>/dev/null

отправляет на нулевое устройство поток 2 (обычно это stderr программы, но предупреждения об устаревании могут отправляться другим потокам).Это «исправить это, даже если вы не знаете, как» исправить.Действительно, есть опция -W, которую можно использовать так: -W ignore::DeprecationWarning или просто -W ignore, которая игнорирует все предупреждения.Вы можете написать скрипт, который вызывает интерпретатор python в вашей программе, или более логически изменить #! программы с помощью чего-то вроде #!/usr/bin/env python -W ignore::DeprecationWarning

3 голосов
/ 17 июня 2010

Вы можете временно отключить предупреждения :

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

import warnings

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

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

В то время как в диспетчере контекста все предупреждения будут просто игнорироваться. Это позволяет использовать известный устаревший код без необходимости видеть предупреждение , не подавляя предупреждение для другого кода, который может не знать об использовании устаревшего кода.Примечание: это может быть гарантировано только в однопоточном приложении.Если два или более потоков используют менеджер контекста catch_warnings одновременно, поведение не определено.

1 голос
/ 17 июня 2010

См. cmdoption-W:

-W arg

Предупреждение управления. Механизм предупреждений Python по умолчанию выводит предупреждающие сообщения в sys.stderr. Типичное предупреждающее сообщение имеет следующую форму:

файл: строка: категория: сообщение

По умолчанию каждое предупреждение печатается один раз для каждой строки источника, где оно возникает. Этот параметр определяет частоту вывода предупреждений.

Может быть задано несколько опций -W; когда предупреждение соответствует нескольким параметрам, выполняется действие для последнего параметра соответствия. Недопустимые параметры -W игнорируются (однако при выдаче первого предупреждения выводится предупреждение о недопустимых параметрах).

...