Ответ 1
Обработка исключения - это способ:
try:
gotdata = dlist[1]
except IndexError:
gotdata = 'null'
Конечно, вы также можете проверить len()
dlist
; но обработка исключения более интуитивно понятна.
Я использую 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'
Конечно, вы также можете проверить len()
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]