「リストインデックスが範囲外です」という例外処理をしたいのですが。


107

BeautifulSoupを使用して、いくつかのHTMLを解析しています。

(forループを使用して)各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
@JhonIntriagoThoth:None明らかにすっきりしていますが'null'、この場合はOPが必要です。
ThiefMaster

ここで素晴らしい解決策。私はコードでそれを使用して、それを書き留めました。ありがとう!
Amir Yunas

31

2つのオプションがあります。例外を処理するか、長さをテストします。

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

または

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

2番目のアイテムがないこと多い場合は1番目を使用し、2番目のアイテムがない場合がある場合は2番目を使用します。


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♦を参照すると、「\ n」またはnullとして指定された値でエラーが発生し、ValueErrorの処理に必要な処理が実行される場合があります。

例外の処理は進むべき道です

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
タブ、Python 3に注意してください
Gouled Med

2

もっと短い方法に興味がある人のために:

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

ただし、最高のパフォーマンスを得るFalseには'null'、ではなくを使用することをお勧めします。1行のテストで十分です。

gotdata = len(dlist)>1 and dlist[1]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.