2016-12-06 6 views
1

В моем приложении Django, когда я импортировать одну библиотеку третьей стороны, я получаю это предупреждение в консоли:Невозможно подавить устаревания предупреждения

модуль имп является устаревшим в пользу importlib; см. документацию модуля для альтернативных целей

Если, однако, я импортирую внутри оболочки Python, тогда все в порядке. Я хочу добиться такого же поведения в Django. Это то, что я пытался на основе ответов в других потоках ОС:

import warnings 
from django.utils.deprecation import RemovedInDjango110Warning 
warnings.filterwarnings(action="ignore", category=RemovedInDjango110Warning) 

Приведенные выше результаты кода в другое сообщение об ошибке, которое говорит, что RemovedInDjango110Warning не существует. Я также пробовал:

import warnings 

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

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

from third_party_lib import some_module 

Но все же я получаю такое же сообщение об ошибке. Итак, похоже, что все предыдущие ответы на эту проблему устарели. И нам нужно новое исправление. Благодаря!

Я также попытался это:

import warnings 

with warnings.catch_warnings(): 
    warnings.filterwarnings("ignore",category=DeprecationWarning) 
    from third_party_lib import some_module 

Но это не имеет никакого эффекта.

+0

Зачем вам это нужно? Вместо использования importlib? – user312016

+1

Вся история не о importlib. Я использую некоторую библиотеку, которая, возможно, где-то использует imp. И действительно, я не хочу прикасаться к этой библиотеке. – Jacobian

+0

Я просто хочу подавить предупреждения, как это делается по умолчанию в оболочке Python. – Jacobian

ответ

3

Есть пара проблем с кодом, который вы пробовали. Если вы хотите отфильтровать PendingDeprecationWarning, тогда вы должны использовать PendingDeprecationWarning в своем коде. Ваш код использует DeprecationWarning и RemovedInDjango110Warning, которые являются разными предупреждениями. Во-вторых, функция fxn() в документах представляет собой примерную функцию, которая создает предупреждение. Не имеет смысла включать его в свой код.

Вы можете фильтровать все ожидающие предупреждения устаревания

import warnings 
warnings.simplefilter("ignore", category=PendingDeprecationWarning) 

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

with warnings.catch_warnings(): 
    warnings.simplefilter("ignore", category=PendingDeprecationWarning) 
    from third_party_lib import some_module 
+0

Спасибо, сэр! Оно работает! – Jacobian

Смежные вопросы