मैं वेबपृष्ठों से कुछ जानकारी स्क्रैप करने की कोशिश कर रहा हूं जो जानकारी कहां स्थित है, इस बारे में असंगत हैं। मुझे कई संभावनाओं को संभालने के लिए कोड मिला है; मैं चाहता हूं कि उन्हें अनुक्रम में आज़माएं, फिर यदि उनमें से कोई भी काम नहीं करता है तो मैं कृपापूर्वक विफल होना चाहता हूं और आगे बढ़ना चाहता हूं।पायथन कोशिश/छोड़कर: कई विकल्पों को आजमाने की कोशिश
यही है, छद्म-कोड में:
try:
info = look_in_first_place()
otherwise try:
info = look in_second_place()
otherwise try:
info = look_in_third_place()
except AttributeError:
info = "Info not found"
मैं नेस्टेड कोशिश बयानों के साथ ऐसा कर सकता है, लेकिन अगर मैं 15 संभावनाओं की जरूरत है तो कोशिश करने के लिए मैं खरोज के 15 स्तरों की आवश्यकता होगी!
यह एक मामूली पर्याप्त सवाल जैसा प्रतीत होता है कि मुझे लगता है कि मुझे कुछ याद आ रही है, लेकिन मैंने इसे जमीन में खोजा है और इस स्थिति के बराबर दिखने वाली कुछ भी नहीं मिल सकती है। क्या ऐसा करने के लिए एक समझदार और पायथनिक तरीका है?
संपादित करें: जैसा कि जॉन का (बहुत अच्छा) समाधान नीचे उठता है, ब्रेवटी के लिए मैंने प्रत्येक लुकअप कॉल को एक फंक्शन कॉल के रूप में लिखा है, जबकि वास्तव में यह आमतौर पर soup.find('h1', class_='parselikeHeader')
जैसे सुंदर सूप कॉल का एक छोटा ब्लॉक है। निस्संदेह मैं इन कार्यों को लपेट सकता हूं, लेकिन ऐसा लगता है कि इस तरह के सरल ब्लॉक के साथ थोड़ा सा सुरुचिपूर्ण लगता है - अगर माफी माँगती है तो मेरी शॉर्टेंड समस्या को बदल देती है। प्रत्येक देखने के लिए एक अलग समारोह है
try:
info = soup.find('h1', class_='parselikeHeader').get('href')
if that fails try:
marker = soup.find('span', class_='header')
info = '_'.join(marker.stripped_strings)
if that fails try:
(other options)
except AttributeError:
info = "Info not found"
कारण है कि आप की क्या ज़रूरत है एक कोशिश/छोड़कर, वृत्ति करने के लिए उपयोग करता है, तो किसी और elif –
धन्यवाद Padraic, लेकिन इसके अलावा में LYBL से अधिक EAFP के पक्ष में, मुझे यकीन है कि मैं अगर भविष्यवाणी करने के लिए सक्षम होगा नहीं कर रहा हूँ की स्थिति जांच के लिए क्योंकि यह कई अलग-अलग तरीकों से गलत हो सकता है, इसलिए एक बाध्य लेकिन व्यापक अपवादों को संभालने से प्राकृतिक फिट लग रहा था। – user3816044
खोज खाली हो जाएगा यदि यह किसी भी चीज़ से मेल नहीं खाता है तो ... यदि कोई मैच है तो केवल तभी सच होगा यदि एलिफ अन्य काम करेगा। आप सभी पैटर्न को एक सूची में डाल सकते हैं और यदि चेक का उपयोग कर उस पर लूप लगा सकते हैं और एक और यदि कोई भी –