Как определить имя модуля для фильтрации конкретного предупреждения Python? - PullRequest
0 голосов
/ 20 сентября 2018

С помощью Python можно фильтровать определенные предупреждения , используя следующий синтаксис командной строки:

-W action:message:category:module:line

Но как определить правильное значение для module для конкретного предупреждения?

Рассмотрим следующий пример:

Использование (pipenv --python 3.6.5 install lxml==4.2.4)

> python -W error -c "from lxml import etree"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "src/lxml/etree.pyx", line 75, in init lxml.etree
  File "src/lxml/_elementpath.py", line 56, in init lxml._elementpath
ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__

Если кто-то хочет игнорировать только это конкретное предупреждение об импорте, как найти имя модуля дляиспользовать?Ни одна из следующих команд не является правильной.Они все еще издают предупреждение.

python -W error -W ignore::ImportWarning:lxml -c "from lxml import etree"
python -W error -W ignore::ImportWarning:lxml.etree -c "from lxml import etree"
python -W error -W ignore::ImportWarning:lxml._elementpath -c "from lxml import etree"
python -W error -W ignore::ImportWarning:etree -c "from lxml import etree"
python -W error -W ignore::ImportWarning:_elementpath -c "from lxml import etree"
python -W error -W 'ignore::ImportWarning:lxml[.*]' -c "from lxml import etree"

1 Ответ

0 голосов
/ 09 ноября 2018

предупреждения ImportWarning, на самом деле, относятся к import.c , но вам нужно отфильтровать с помощью _frozen_importlib, стеки в предупреждающем сообщении являются неполными, а внутренние стеки опущены.Вы можете получить эту информацию, переопределив warnings.showwarning:

import warnings

def showwarning(message, category, filename, lineno, file, line):
    print(filename)

warnings.showwarning = showwarning
warnings.resetwarnings() # allow all warnings

from lxml import etree

. Вы можете проверить это:

python -Werror::ImportWarning:_frozen_importlib -c 'import lxml.etree'

кстати ImportWarning игнорируется по умолчанию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...