无法抑制弃用警告

时间:2016-12-06 10:52:02

标签: python django

在我的Django应用程序中,当我导入一个第三方库时,我在控制台中收到此警告:

  

不推荐使用imp模块以支持importlib;请参阅模块的文档以了解其他用途

但是,如果我在Python shell中进行导入,那么一切正常。我想在Django中实现相同的行为。这是我根据其他OS线程中的答案尝试的:

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

但它没有效果。

1 个答案:

答案 0 :(得分:5)

您尝试过的代码存在一些问题。如果您要过滤PendingDeprecationWarning,则应在代码中使用PendingDeprecationWarning。您的代码使用的是DeprecationWarningRemovedInDjango110Warning,它们是不同的警告。其次,文档中的fxn()函数是一个创建警告的示例函数。将它包含在您的代码中是没有意义的。

您可以过滤所有待处理的弃用警告

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

但是,这可能会隐藏您应该修复的自己代码中的待定弃用。更好的方法是使用上下文管理器,在导入第三方库时过滤掉警告。

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