4

我正在运行以下代码

positive_values = values.where(values > 0)  

在这个例子values中可能包含nan元素。我相信出于这个原因,我会收到以下运行时警告:

RuntimeWarning: invalid value encountered in greater_equal if not reflexive  

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

4

2 回答 2

5

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)  

上下文管理器在进入上下文之前保存原始警告设置,然后在退出上下文时将它们设置回来。

于 2016-12-13T16:31:40.777 回答
3

作为一般经验法则,应该注意而不是压制警告。您要么知道导致警告的原因,要么不知道。如果您知道导致警告的原因,通常有一个简单的解决方法。如果您不知道导致警告的原因,则可能存在错误。&在这种情况下,您可以使用如下的短路特性:

positive_values = values.where(values.notnull() & values > 0)
于 2016-12-13T16:52:00.727 回答