title: How do I catch a numpy warning like it's an exception (not just for testing)?
body: <p>I have to make a Lagrange polynomial in Python for a project I'm doing. I'm doing a barycentric style one to avoid using an explicit for-loop as opposed to a Newton's divided difference style one. The problem I have is that I need to catch a division by zero, but Python (or maybe numpy) just makes it a warning instead of a normal exception.</p>
  
  <p>So, what I need to know how to do is to catch this warning as if it were an exception. The related questions to this I found on this site were answered not in the way I needed. Here's my code:</p>
  
  <pre><code>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. 
  </code></pre>
  
  <p>When this code is executed, the output I get is:</p>
  
  <pre><code>Warning: divide by zero encountered in int_scalars
  </code></pre>
  
  <p>That's the warning I want to catch. It should occur inside the list comprehension.</p>