133

I am using BeautifulSoup and parsing some HTMLs.

I'm getting a certain data from each HTML (using for loop) and adding that data to a certain list.

The problem is, some of the HTMLs have different format (and they don't have the data that I want in them).

So, I was trying to use exception handling and add value null to the list (I should do this since the sequence of data is important.)

For instance, I have a code like:

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

and some of the links don't have any <dd class='title'>, so what I want to do is add string null to the list instead.

The error appears:

list index out of range.

私が試したことは、次のような行を追加することです。

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

しかし、うまくいきません。それでもエラーが表示されます:

list index out of range.

これについてどうすればよいですか?例外処理を使用する必要がありますか? またはもっと簡単な方法はありますか?

助言がありますか?どんな助けでも本当に素晴らしいでしょう!

4

6 に答える 6

314

例外を処理する方法は次のとおりです。

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

もちろん、len()ofもチェックできdlistます。ただし、例外の処理はより直感的です。

于 2012-08-10T13:17:13.787 に答える
44

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

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

また

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

2 番目の項目がないことが多い場合は1 番目を使用し、 2 番目の項目がない場合は 2 番目を使用します。

于 2012-08-10T13:17:43.590 に答える
28

3 進数で十分です。変化する:

gotdata = dlist[1]

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

これはより短い表現方法です

if len(dlist) > 1:
    gotdata = dlist[1]
else: 
    gotdata = 'null'
于 2012-08-10T13:22:06.253 に答える
3

ThiefMaster♦ を参照すると、「\n」または null として指定された値でエラーが発生し、ValueError の処理に必要な処理を実行することがあります。

例外の処理は行くべき道です

try:
    gotdata = dlist[1]
except (IndexError, ValueError):
    gotdata = 'null'
于 2015-01-10T07:12:33.077 に答える
0
for i in range (1, len(list))
    try:
        print (list[i])

    except ValueError:
        print("Error Value.")
    except indexError:
        print("Erorr index")
    except :
        print('error ')
于 2016-06-21T12:16:02.950 に答える