Как мне поймать недействительное предупреждение, как будто это исключение (не только для тестирования)?

Я должен сделать полином Лагранжа в Python для проекта, который яя делаю. Я'я делаю барицентрический стиль, чтобы избежать использования явного цикла for в отличие от ньютона 'разделенная разница стиль один. У меня проблема в том, что мне нужно поймать деление на ноль, но Python (или, может быть, numpy) просто делает это предупреждение вместо обычного исключения.

Итак, что мне нужно знать, как это перехватить это предупреждение, как если бы оно было исключением. Ответы на вопросы, которые я нашел на этом сайте, были получены не так, как мне было нужно. Вот'мой код:

import numpy as np
import matplotlib.pyplot as plt
import warnings

class Lagrange:
    def __init__(self, xPts, yPts):
        self.xPts = np.array(xPts)
        self.yPts = np.array(yPts)
        self.degree = len(xPts)-1 
        self.weights = np.array([np.product([x_j - x_i for x_j in xPts if x_j != x_i]) for x_i in xPts])

    def __call__(self, x):
        warnings.filterwarnings("error")
        try:
            bigNumerator = np.product(x - self.xPts)
            numerators = np.array([bigNumerator/(x - x_j) for x_j in self.xPts])
            return sum(numerators/self.weights*self.yPts) 
        except Exception, e: # Catch division by 0. Only possible in 'numerators' array
            return yPts[np.where(xPts == x)[0][0]]

L = Lagrange([-1,0,1],[1,0,1]) # Creates quadratic poly L(x) = x^2

L(1) # This should catch an error, then return 1. 

Когда этот код выполняется, я получаю вывод:

Warning: divide by zero encountered in int_scalars

Тот'Это предупреждение, которое я хочу поймать. Это должно происходить внутри списка понимания.

Ответы на вопрос(4)

Ваш ответ на вопрос