আমি হ্যান্ডেল 'তালিকা সূচকের সীমা ছাড়িয়ে' ব্যতিক্রম করতে চাই।


107

আমি বিউটিফুলসুপ ব্যবহার করছি এবং কিছু এইচটিএমএল পার্স করছি ।

আমি প্রতিটি এইচটিএমএল (লুপের জন্য ব্যবহার করে) থেকে একটি নির্দিষ্ট ডেটা পাচ্ছি এবং সেই তথ্যটি একটি নির্দিষ্ট তালিকায় যুক্ত করছি।

সমস্যাটি হ'ল, কিছু 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'এই ক্ষেত্রে চায় wants
চোরমাস্টার

এখানে দুর্দান্ত সমাধান। আমি এটি আমার কোডটিতে ব্যবহার করেছি এবং এটির একটি নোট তৈরি করেছি। ধন্যবাদ!
আমির ইউনাস

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

থিফমাস্টারের রেফারেন্স গ্রহণ করা ♦ কখনও কখনও আমরা '' n 'বা নাল হিসাবে প্রদত্ত মান সহ একটি ত্রুটি পাই এবং ভ্যালুআরার হ্যান্ডেল করার জন্য এটি সম্পাদন করি:

ব্যতিক্রম হ্যান্ডলিং করার উপায়

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

2
for i in range (1, len(list))
    try:
        print (list[i])

    except ValueError:
        print("Error Value.")
    except indexError:
        print("Erorr index")
    except :
        print('error ')

2
ট্যাবটি থেকে সাবধান থাকুন, পাইথন 3
গাইলেড মেড

2

সংক্ষিপ্ত উপায়ে আগ্রহীদের জন্য:

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

তবে সেরা পারফরম্যান্সের জন্য, আমি এর Falseপরিবর্তে ব্যবহারের পরামর্শ দিই 'null', তবে একটি লাইন পরীক্ষা যথেষ্ট হবে:

gotdata = len(dlist)>1 and dlist[1]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.