2016-12-13 15 views
2

Я бег следующего кодаПодавить предупреждения для питона-xarray

positive_values = values.where(values > 0) 

В этом примере values может содержать nan элементов. Я считаю, что именно по этой причине, я получаю следующее предупреждение во время выполнения:

RuntimeWarning: invalid value encountered in greater_equal if not reflexive 

ли xarray метода surpressing этих предупреждений?

+1

что-то вроде 'positive_values ​​= values.where (values.notnull и значения> 0)'? –

+0

Мне нравится предложение. Спасибо. – Conic

ответ

3

Модуль warnings предоставляет функциональность, которую вы ищете.

Чтобы подавить все предупреждения делать (см John Coleman's answer, почему это не хорошая практика):

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) 

Контекст менеджер сохраняет исходные настройки предупреждения перед входом в контекст, а затем устанавливает их обратно при выходе из контекста.

+0

Благодарим вас за такой быстрый ответ. Я поклонник краткости/удобочитаемости. Это добавляет много шума для кодирования с точки зрения удобочитаемости. Существуют ли способы использования библиотеки предупреждений для глобального предупреждения некоторых предупреждений (IE: Runtime Warning)? Или это лучший питон на данный момент? – Conic

+0

В верхней части вашего основного модуля выполняются 'импорт предупреждений, warnings.simplefilter (" ignore ", category = RuntimeWarning)'. Это подавит все RuntimeWarnings. Как отмечает @JohnColeman, это не очень хорошая практика. Эти предупреждения существуют по какой-то причине. Я бы особенно предостерег от глобального предупреждения предупреждений, потому что вы не знаете, какие предупреждения вы в конечном итоге потеряете. –

2

Как правило, предупреждения следует принимать во внимание, а не подавлять. Либо вы знаете, что вызывает предупреждение, либо нет. Если вы знаете, что вызывает предупреждение, обычно есть простой способ обхода проблемы. Если вы не знаете, что вызывает предупреждение, вероятно, есть ошибка. В этом случае, вы можете использовать короткое замыкание характер & следующим образом:

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

Спасибо за этот ответ. Я открыл вопрос о том, почему предупреждение бросается в первую очередь. Если вам интересно. Вы можете найти его на странице : http://stackoverflow.com/questions/41130138/why-is-invalid-value-encountered-in-greater-warning-thrown-in-python-xarray-fo – Conic