首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我想要例外处理‘列表索引超出范围。’

我想要例外处理‘列表索引超出范围。’
EN

Stack Overflow用户
提问于 2012-08-10 13:15:45
回答 6查看 382.5K关注 0票数 143

我正在使用BeautifulSoup并解析一些HTML。

我从每个HTML (使用for循环)中获取特定的数据,并将数据添加到特定的列表中。

问题是,有些HTML有不同的格式(而且它们没有我想要的数据)。

因此,我试图使用异常处理并将值null添加到列表中(我应该这样做,因为数据序列很重要)。

例如,我有这样的代码:

代码语言:javascript
代码运行次数:0
运行
复制
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添加到列表中。

出现的错误如下:

代码语言:javascript
代码运行次数:0
运行
复制
list index out of range.

我所做的就是添加这样的几行:

代码语言:javascript
代码运行次数:0
运行
复制
if not dlist[1]:  
   newlist.append('null')
   continue

但这不管用。它仍然显示错误:

代码语言:javascript
代码运行次数:0
运行
复制
list index out of range.

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

有什么建议吗?任何帮助都是很棒的!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-08-10 13:17:13

处理异常是要走的路:

代码语言:javascript
代码运行次数:0
运行
复制
try:
    gotdata = dlist[1]
except IndexError:
    gotdata = 'null'

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

票数 333
EN

Stack Overflow用户

发布于 2012-08-10 13:17:43

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

代码语言:javascript
代码运行次数:0
运行
复制
if len(dlist) > 1:
    newlist.append(dlist[1])
    continue

代码语言:javascript
代码运行次数:0
运行
复制
try:
    newlist.append(dlist[1])
except IndexError:
    pass
continue

如果经常没有第二项,则使用第一项;如果有时没有第二项,则使用第二项。

票数 46
EN

Stack Overflow用户

发布于 2012-08-10 13:22:06

三元就够了。改变:

代码语言:javascript
代码运行次数:0
运行
复制
gotdata = dlist[1]

代码语言:javascript
代码运行次数:0
运行
复制
gotdata = dlist[1] if len(dlist) > 1 else 'null'

这是一种简短的表达方式。

代码语言:javascript
代码运行次数:0
运行
复制
if len(dlist) > 1:
    gotdata = dlist[1]
else: 
    gotdata = 'null'
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11902458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档