无法抑制弃用警告

5
在我的Django应用程序中,当我导入一个第三方库时,控制台会显示如下警告信息:

the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses

然而,如果我在Python shell中进行导入,则一切正常。我想在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

但是它没有任何效果。


你为什么想要那样做?而不是直接使用importlib? - Pierre Barre
3
整个故事与importlib无关。我正在使用某个库,可能在某些地方使用imp。实际上,我不想触碰这个库。 - Jacobian
我只想像在Python shell中默认情况下一样抑制警告。 - Jacobian
你是否收到了 DeprecationWarningPendingDeprecationWarning 警告? - Alasdair
我收到了“PendingDeprecationWarning”。 - Jacobian
1个回答

8
你尝试的代码存在一些问题。如果你想过滤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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接