抑制python-xarray的警告信息

4

我正在运行以下代码

positive_values = values.where(values > 0)  

在这个例子中,values可能包含nan元素。我认为,由于这个原因,我得到了下面的运行时警告:
RuntimeWarning: invalid value encountered in greater_equal if not reflexive  

xarray是否有抑制这些警告的方法?


1
类似这样的编程内容:positive_values = values.where(values.notnull & values > 0)? - John Coleman
我喜欢这个建议。谢谢你。 - Conic
2个回答

7

warnings 模块提供了您所需的功能。

要禁止所有警告,请执行以下操作(有关此做法不好的原因,请参见John Coleman 的答案):

import warnings
warnings.simplefilter("ignore") 
# warnings.simplefilter("ignore", category=RuntimeWarning) # for RuntimeWarning only

为了使抑制只是临时的,请在 warnings.catch_warnings() 上下文管理器中执行它:
import warnings

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    positive_values = values.where(values > 0)  

上下文管理器会在进入上下文之前保存原始的警告设置,并在退出上下文时将其恢复。

谢谢您的迅速回复。我喜欢简洁易读的代码。这会在可读性方面给代码增加很多噪音。是否有办法使用警告库来全局禁止某些警告(例如:运行时警告)?或者这是目前Python最好的方法了? - Conic
在你的主模块顶部加入 import warnings;warnings.simplefilter("ignore", category=RuntimeWarning)。这将会抑制所有 RuntimeWarnings。正如 @JohnColeman 所指出的,这不是一个好的做法。这些警告存在是有原因的。我特别警告不要全局抑制警告,因为你不知道会错过哪些警告。 - Steven Rumbalski

3

一般来说,警告信息应该被重视而不是被抑制。你要么知道警告信息的原因,要么不知道。如果你知道警告信息的原因,通常有一个简单的解决方法。如果你不知道警告信息的原因,很可能是一个 bug。在这种情况下,你可以使用 & 的短路特性,如下所示:

positive_values = values.where(values.notnull() & values > 0)

感谢您的回复。我已经提出了一个问题,询问为什么首先会抛出警告。如果您有兴趣,可以在以下网址找到它: http://stackoverflow.com/questions/41130138/why-is-invalid-value-encountered-in-greater-warning-thrown-in-python-xarray-fo - Conic

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