Как избавиться от определенных предупреждающих сообщений в python, сохраняя все остальные предупреждения как обычно?
Я делаю небольшую математическую ошибку в python script и получаю следующее предупреждение:
"Предупреждение: разделите на ноль, встречающееся при делении".
Чтобы обеспечить некоторый контекст, я беру два значения и пытаюсь найти процентную разницу в значении (a - b) / a
, и если его выше определенный диапазон затем обрабатывает его, но иногда значение a
или b
равно нулю,
Я хочу избавиться от этого конкретного предупреждения (в определенной строке), но вся информация, которую я нашел до сих пор, кажется, показывает мне, как остановить все предупреждения (чего я не хочу).
Когда я писал сценарии оболочки, я мог бы сделать что-то вроде этого
code...
more code 2 > error.txt
even more code
В этом примере я получаю предупреждения для команды "code" и "even more code", но не для второй строки.
Возможно ли это?
Ответы
Ответ 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 ..