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

新手上路,请多包涵

我在 python 脚本中隐性地做一些简单的数学运算,并收到以下警告:

“警告:在除法中遇到被零除”。

为了提供一些上下文,我采用两个值并试图找到值的百分比差异 (a - b) / a 如果它高于某个范围然后处理它,但有时值 ab 为零。

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

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

code...
more code 2 > error.txt
even more code

在那个例子中,我会收到“代码”和“更多代码”命令的警告,但不会收到第二行的警告。

这可能吗?

原文由 Lostsoul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 426
2 个回答

我会首先避免被零除:

 if a == 0:
    # Break out early

# Otherwise the ratio makes sense

如果你确实想在一行中压缩特定的 numpy 警告,numpy 提供 了一种方法

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

原文由 Blender 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果 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 ..

原文由 Ned Batchelder 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题