BeautifulSoupを使用し、いくつかのHTMLを解析しています。
各HTML(forループを使用)から特定のデータを取得し、そのデータを特定のリストに追加しています。
問題は、一部の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.
これについてどうすればよいですか?例外処理を使用する必要がありますか?または簡単な方法はありますか?
助言がありますか?どんな助けも本当に素晴らしいでしょう!
例外を処理する方法です。
try:
gotdata = dlist[1]
except IndexError:
gotdata = 'null'
もちろん、dlist
のlen()
も確認できます。ただし、例外の処理はより直感的です。
2つのオプションがあります。例外を処理するか、長さをテストします。
if len(dlist) > 1:
newlist.append(dlist[1])
continue
または
try:
newlist.append(dlist[1])
except IndexError:
pass
continue
しばしばが2番目の項目がない場合は最初を使用し、sometimesが2番目の項目がない場合は2番目を使用します。
三元で十分です。変化する:
gotdata = dlist[1]
に
gotdata = dlist[1] if len(dlist) > 1 else 'null'
これは表現のより短い方法です
if len(dlist) > 1:
gotdata = dlist[1]
else:
gotdata = 'null'
ThiefMaster♦を参照すると、値が '\ n'またはnullとして指定されたエラーが発生することがあり、ValueErrorの処理に必要なエラーを実行します。
例外を処理する方法です
try:
gotdata = dlist[1]
except (IndexError, ValueError):
gotdata = 'null'
短い方法に興味がある人には:
gotdata = len(dlist)>1 and dlist[1] or 'null'
ただし、最高のパフォーマンスを得るには、「null」の代わりにFalseを使用することをお勧めします。1行のテストで十分です。
gotdata = len(dlist)>1 and dlist[1]
for i in range (1, len(list))
try:
print (list[i])
except ValueError:
print("Error Value.")
except indexError:
print("Erorr index")
except :
print('error ')