मैं 'लिस्ट इंडेक्स ऑफ रेंज' को संभालना चाहता हूं।


107

मैं सुंदर का उपयोग कर रहा हूँ और कुछ HTML पार्स कर रहा हूँ ।

मुझे प्रत्येक HTML से एक निश्चित डेटा मिल रहा है (लूप के लिए) और उस डेटा को एक निश्चित सूची में जोड़ रहा है।

समस्या यह है कि, कुछ HTML के अलग-अलग प्रारूप हैं (और उनके पास वह डेटा नहीं है जो मुझे चाहिए)

इसलिए, मैं अपवाद हैंडलिंग का उपयोग nullकरने और सूची में मूल्य जोड़ने की कोशिश कर रहा था (डेटा के अनुक्रम महत्वपूर्ण होने के बाद से मुझे ऐसा करना चाहिए।)

उदाहरण के लिए, मेरे पास एक कोड है:

soup = BeautifulSoup(links)
dlist = soup.findAll('dd', 'title')
# I'm trying to find content between <dd class='title'> and </dd>
gotdata = dlist[1]
# and what i want is the 2nd content of those
newlist.append(gotdata)
# and I add that to a newlist

और कुछ लिंक किसी के पास नहीं हैं <dd class='title'>, इसलिए मैं जो करना चाहता हूं, उसके nullबजाय सूची में स्ट्रिंग जोड़ें ।

त्रुटि दिखाई देती है:

list index out of range.

मैंने जो कुछ करने की कोशिश की है, वह कुछ पंक्तियों को इस तरह से जोड़ना है:

if not dlist[1]:  
   newlist.append('null')
   continue

लेकिन यह काम नहीं करता है। यह अभी भी त्रुटि दिखाता है:

list index out of range.

इसके बारे में मुझे क्या करना चाहिए? क्या मुझे अपवाद हैंडलिंग का उपयोग करना चाहिए? या कोई आसान तरीका है?

कोई सुझाव? कोई मदद वास्तव में बहुत अच्छा होगा!

जवाबों:


246

अपवाद को संभालने का तरीका है:

try:
    gotdata = dlist[1]
except IndexError:
    gotdata = 'null'

बेशक आप भी जांच कर सकता है len()की dlist; लेकिन अपवाद को संभालना अधिक सहज है।


1
@ जोंइंतृयागोथोथ: जबकि Noneस्पष्ट रूप से क्लीनर है, ओपी 'null'इस मामले में चाहता है।
ThiefMaster

यहाँ महान समाधान। मैंने इसे अपने कोड में इस्तेमाल किया और इसका एक नोट बनाया। धन्यवाद!
अमीर यूनास

31

आपके पास दो विकल्प हैं; या तो अपवाद को संभालें या लंबाई का परीक्षण करें:

if len(dlist) > 1:
    newlist.append(dlist[1])
    continue

या

try:
    newlist.append(dlist[1])
except IndexError:
    pass
continue

पहली का उपयोग करें यदि अक्सर कोई दूसरा आइटम नहीं है, तो दूसरा अगर कभी-कभी कोई दूसरा आइटम नहीं है।


24

एक टर्नरी पर्याप्त होगा। परिवर्तन:

gotdata = dlist[1]

सेवा

gotdata = dlist[1] if len(dlist) > 1 else 'null'

यह व्यक्त करने का एक छोटा तरीका है

if len(dlist) > 1:
    gotdata = dlist[1]
else: 
    gotdata = 'null'

3

ThiefMaster का संदर्भ लेते हुए we कभी-कभी हमें '\ n' या शून्य के रूप में दिए गए मान के साथ एक त्रुटि मिलती है और इसके लिए ValueError को संभालने की आवश्यकता होती है:

अपवाद को संभालने का तरीका है

try:
    gotdata = dlist[1]
except (IndexError, ValueError):
    gotdata = 'null'


2

छोटे तरीके से रुचि रखने वाले के लिए:

gotdata = len(dlist)>1 and dlist[1] or 'null'

लेकिन सर्वश्रेष्ठ प्रदर्शन के लिए, मैं Falseइसके बजाय का उपयोग करने का सुझाव देता हूं 'null', फिर एक पंक्ति परीक्षण पर्याप्त होगा:

gotdata = len(dlist)>1 and dlist[1]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.