Подтвердить что ты не робот

Как избавиться от определенных предупреждающих сообщений в python, сохраняя все остальные предупреждения как обычно?

Я делаю небольшую математическую ошибку в python script и получаю следующее предупреждение:

"Предупреждение: разделите на ноль, встречающееся при делении".

Чтобы обеспечить некоторый контекст, я беру два значения и пытаюсь найти процентную разницу в значении (a - b) / a, и если его выше определенный диапазон затем обрабатывает его, но иногда значение a или b равно нулю,

Я хочу избавиться от этого конкретного предупреждения (в определенной строке), но вся информация, которую я нашел до сих пор, кажется, показывает мне, как остановить все предупреждения (чего я не хочу).

Когда я писал сценарии оболочки, я мог бы сделать что-то вроде этого

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

В этом примере я получаю предупреждения для команды "code" и "even more code", но не для второй строки.

Возможно ли это?

4b9b3361

Ответ 1

Легче исправить предупреждения, чем отключить их:

if a == 0 or b == 0:
  return False

# Your actual code

Или, если вы хотите получить представление о синтаксисе Python:

if not all([a, b]):
  return False

# Your actual code

Это не сложно сделать, но я все равно этого не сделаю. Из API:

numpy.seterr(divide='ignore')

Ответ 2

Если 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 ..