我想异常处理’列表索引超出范围

我正在使用 美味汤并解析一些 HTML。

我从每个 HTML (使用 for loop)中获得一些数据,并将这些数据添加到一个特定的列表中。

问题是,一些 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.

我应该怎么做? 我应该使用异常处理吗? 还是有更简单的方法?

有什么建议吗? 任何帮助都是非常好的!

383099 次浏览

处理异常情况才是正确的做法:

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

当然,您也可以检查 dlistlen(); 但是处理异常更加直观。

您有两个选项; 要么处理异常,要么测试长度:

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]