Я хочу обработать исключение ' индекс списка вне диапазона.'


Я использую BeautifulSoup и разбор некоторых HTMLs.

Я получаю определенные данные из каждого HTML (используя цикл for) и добавление этих данных в определенный список.

проблема в том, что некоторые HTMLs имеют другой формат (и у них нет данных, что я хочу в них).

так, я пытался использовать обработку исключений и добавить значение 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.

что мне с этим делать? Должен ли я использовать обработка исключений? или есть более простой способ?

какие предложения? Любая помощь будет действительно здорово!

6 65

6 ответов:

обработка исключения-это путь:

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

конечно, вы также можете проверить len() of dlist; но обработка исключения более интуитивно понятна.

у вас есть два варианта; либо обрабатывать исключение или проверить длину:

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

или

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

используйте первый, если есть часто нет второго пункта, второй, если есть иногда это не второй пункт.

троичный будет достаточно. изменение:

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'
for i in range (1, len(list))
    try:
        print (list[i])

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

для любого, кто заинтересован в более коротком пути:

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

но для лучшей производительности, я предлагаю использовать False вместо 'null', то тест одной строки будет достаточно:

gotdata = len(dlist)>1 and dlist[1]