如何在python中删除特定的警告消息,同时保持所有其他警告正常?

时间:2012-02-03 20:05:34

标签: python

我在python脚本中隐藏了一些简单的数学,并得到了以下警告:

  

“警告:在分裂中遇到零除。”

为了提供一些上下文,我正在使用两个值并尝试查找值(a - b) / a的百分比差异,如果它超出某个范围,则处理它,但有时会a或{的值{1}}为零。

我想摆脱这个特定的警告(在特定的一行),但到目前为止我找到的所有信息似乎都告诉我如何停止所有警告(我不想要)。

当我以前写shell脚本时,我可以做这样的事情

b

在那个例子中,我会得到'代码'和'甚至更多代码'命令的警告,但不是第二行的警告。

这可能吗?

2 个答案:

答案 0 :(得分:68)

如果Scipy正在使用warnings模块,那么您可以禁止显示特定警告。在程序开始时尝试这个:

import warnings
warnings.filterwarnings("ignore", message="divide by zero encountered in divide")

如果您希望这仅适用于代码的一部分,请使用警告上下文管理器:

import warnings
with warnings.catch_warnings():
    warnings.filterwarnings("ignore", message="divide by zero encountered in divide")
    # .. your divide-by-zero code ..

答案 1 :(得分:12)

我首先要避免被零除:

if a == 0:
    # Break out early

# Otherwise the ratio makes sense

如果你想在一行上压制那个特定的numpy警告,numpy会提供a way

with numpy.errstate(divide='ignore'):
    # The problematic line