Фильтр предупреждений Python не скрывает это DeprecationWarning

Даже при переключении на mstrio.project_objects.dashboard все равно отображается предупреждение об устаревании, игнорирование его не работает.

$ pip install -Uq mstrio-py
$ export PYTHONWARNINGS='ignore:mstrio.project_objects.dossier module is deprecated:DeprecationWarning'
$ python3 -c 'from mstrio.project_objects import dashboard'
DeprecationWarning: mstrio.project_objects.dossier module is deprecated and will not be supported starting from mstrio-py 11.5.03. Please use mstrio.project_objects.dashboard instead.
$ python3 -W "ignore:mstrio.project_objects.dossier module is deprecated:DeprecationWarning" -c "from mstrio.project_objects import dashboard"
DeprecationWarning: mstrio.project_objects.dossier module is deprecated and will not be supported starting from mstrio-py 11.5.03. Please use mstrio.project_objects.dashboard instead.

Защита импорта с помощью контекстного менеджера также не работает.

>>> import warnings
>>> with warnings.catch_warnings():
...     warnings.filterwarnings("ignore", message = ".*mstrio.project_objects.dossier module is deprecated.*")
...     from mstrio.project_objects import dashboard
... 
DeprecationWarning: mstrio.project_objects.dossier module is deprecated and will not be supported starting from mstrio-py 11.5.03. Please use mstrio.project_objects.dashboard instead.

Почему оно не уходит? Как избежать этого предупреждения об устаревании?

Это последний mstrio-py, то есть 11.4.3.101.

pip install --upgrade mstrio-py :D

user70 25.03.2024 21:01

@user70 user70 это уже последняя версия

no step on snek 25.03.2024 21:45

попробуйте сделать это в одну строку, пожалуйста python3 -W "ignore:mstrio.project_objects.dossier module is deprecated:DeprecationWarning" -c "from mstrio.project_objects import dashboard" это работает?

user70 25.03.2024 21:48

@ user70 Нет, это не так.

no step on snek 25.03.2024 22:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

mstrioпереопределяет фильтр предупреждений:

warnings.filterwarnings(action=print_warnings, module=module_path)
warnings.filterwarnings(
    action=print_warnings, category=DeprecationWarning, module=module_path
)
warnings.filterwarnings(action='default', category=UserWarning, module=module_path)

Он также исправляет форматирование предупреждений, поэтому ваше предупреждающее сообщение не выглядит так, как обычно:

def custom_formatwarning(msg, category, *args, **kwargs):
    # ignore everything except the message
    return str(category.__name__) + ': ' + str(msg) + '\n'


warnings.formatwarning = custom_formatwarning

В этом файле есть много вещей, которые этот пакет действительно не должен делать. Лучшим вариантом может быть поднять проблему с MicroStrategy и попросить ее изменить это.

Но разве это не влияет на все, а не только на собственное пространство имен mstrio? Как импортировать mstrio, не портя глобальное состояние? И почему вместо этого предупреждается использование mstrio.project_objects.dashboard, когда это уже использовалось?

no step on snek 31.03.2024 19:01

@nosteponsnek: Да, это влияет на все. Этот пакет действительно не должен делать ничего из этого. Этот код просто отстой.

user2357112 01.04.2024 01:37

Предупреждение появляется, потому что mstrio сам импортирует собственный устаревший mstrio.project_objects.dossier подмодуль, вызывая собственное предупреждение об устаревании.

user2357112 01.04.2024 01:39

Единственный хороший способ избежать подобного поведения — внести изменения на стороне MicroStrategy. Из плохих способов вам придется использовать такие варианты, как самостоятельное редактирование установленных файлов библиотеки или исправление обезьян __import__, чтобы предотвратить загрузку mstrio.config.

user2357112 01.04.2024 01:44

Другие вопросы по теме