Подтвердить что ты не робот

Я хочу, чтобы индекс дескриптора исключения был исключен из диапазона.

Я использую 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.

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

или

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

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

Ответ 3

Тройной будет достаточно. менять:

gotdata = dlist[1]

в

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

это более короткий способ выражения

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

Ответ 4

Ссылаясь на ThiefMaster ♦ иногда мы получаем ошибку со значением, заданным как "\n" или "null", и выполняем для этого, требуемого для обработки ValueError:

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

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

Ответ 5

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

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

Ответ 6

для любого, кого интересует более короткий путь:

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

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

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