मुझे एक परियोजना के लिए पायथन में एक लैंगेंज बहुपद बनाना है। न्यूटन की विभाजित अंतर शैली के विपरीत एक स्पष्ट फॉर-लूप का उपयोग करने से बचने के लिए मैं एक बेरेंट्रिक शैली कर रहा हूं। मेरी समस्या यह है कि मुझे शून्य से एक विभाजन पकड़ने की आवश्यकता है, लेकिन पायथन (या शायद 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
चेतावनी मैं पकड़ने के लिए चाहते हैं यही कारण है कि। यह सूची समझ के अंदर होना चाहिए।
आप काफी यकीन है कि यह' चेतावनी है कर रहे हैं? 'Np.array ([1])/0' जैसी चीजों को आजमाकर मुझे आउटपुट के रूप में 'रनटाइम चेतावनी: ...' मिलता है। – Bakuriu
@MadPhysicist डुप्लिकेट नहीं; न्यूमपी के पास पाइथन के शीर्ष पर अपनी आंतरिक चेतावनी वास्तुकला है, जिसे विशेष रूप से नियंत्रित किया जा सकता है (Bakuríu द्वारा जवाब देखें)। – gerrit
@gerrit। मैं सही हो गया और एक नई बात सीखा। बैज संग्रह उन्माद ट्रिगर करने से बचने के लिए मैंने अपनी मूल टिप्पणी हटा दी। –