如何在Linux终端中抑制Python的弃用警告?

3 投票
4 回答
6605 浏览
提问于 2025-04-16 00:06

我通过 easy_install 安装了 i18ndude(这是一个用于 Plone 的国际化工具)。

当我在终端运行这个工具 i18ndude 时,出现了:

/usr/local/lib/python2.6/dist-packages/i18ndude-3.1.2-py2.6.egg/i18ndude/odict.py:7: DeprecationWarning: object.__init__() takes no parameters
  dict.__init__(self, dict)

我该如何在命令行调用这个工具时抑制这些警告信息?这样做可能吗?我知道理论上我应该安装其他的 Python 解释器,然后从那个解释器调用 i18ndude,但我想要一个更简单的方法(比如一个参数之类的)。

顺便说一下,我使用的是来自 Plone 官方网站i18ndude 脚本。

4 个回答

3

你可以暂时屏蔽警告

如果你在使用一些代码,这些代码会发出警告,比如使用了不推荐的函数,但你又不想看到这些警告,那么你可以使用一个叫做 catch_warnings 的上下文管理器来屏蔽这些警告:

import warnings

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

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

在这个上下文管理器的范围内,所有的警告都会被忽略。这让你可以使用那些已知不推荐的代码,而不必看到警告,同时又不会影响到其他可能不知道自己在使用不推荐代码的代码。注意:这种效果只能在单线程的应用程序中保证。如果有两个或更多的线程同时使用 catch_warnings 上下文管理器,结果就不确定了。

4

如果你是以脚本的方式运行的话,可以使用:

#!/usr/bin/env python -W ignore::DeprecationWarning
5

可以使用重定向,但这样会把所有发送到那个“流”的信息都给屏蔽掉;比如:

i178ndude 2>/dev/null

这段代码把流2(通常是程序的错误输出,也就是stderr,但一些弃用警告可能会发送到其他流)发送到了一个空设备。这就相当于一种“即使你不知道怎么做也要修复”的方法。实际上,有一个选项,-W,可以这样使用:-W ignore::DeprecationWarning,或者简单地使用-W ignore来忽略所有警告。你可以写一个脚本来调用Python解释器运行你的程序,或者更合理地修改程序的#!行,像这样#!/usr/bin/env python -W ignore::DeprecationWarning

撰写回答