我想异常处理“列表索引超出范围”。

Posted

技术标签:

【中文标题】我想异常处理“列表索引超出范围”。【英文标题】:I want to exception handle 'list index out of range.' 【发布时间】:2012-08-07 19:15:44 【问题描述】:

我正在使用 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

有些链接没有任何&lt;dd class='title'&gt;,所以我想要将字符串null 添加到列表中。

出现错误:

list index out of range.

我所做的尝试是添加一些这样的行:

if not dlist[1]:  
   newlist.append('null')
   continue

但它不起作用。它仍然显示错误:

list index out of range.

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

有什么建议吗?任何帮助都会非常棒!

【问题讨论】:

【参考方案1】:

对于任何对更短的方式感兴趣的人:

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

但为了获得最佳性能,我建议使用False 而不是'null',那么单行测试就足够了:

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

【讨论】:

这种风格在python引入条件表达式之前很常见(v = a if condition else b),但已经过时多年了。【参考方案2】:

三元组就足够了。改变:

gotdata = dlist[1]

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

这是一种更简洁的表达方式

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

【讨论】:

【参考方案3】:

处理异常是要走的路:

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

当然你也可以查看dlistlen();但处理异常更直观。

【讨论】:

【参考方案4】:
for i in range (1, len(list))
    try:
        print (list[i])

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

【讨论】:

当心标签,Python 3【参考方案5】:

参考 ThiefMaster♦ 有时我们会得到一个错误,其值为 '\n' 或 null 并执行处理 ValueError 所需的错误:

处理异常是要走的路

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

【讨论】:

你什么时候能从这里得到ValueError【参考方案6】:

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

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

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

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

【讨论】:

以上是关于我想异常处理“列表索引超出范围”。的主要内容,如果未能解决你的问题,请参考以下文章

Python循环:列表索引超出范围

Python Pandas 索引错误:列表索引超出范围

为啥在使用 readlines() 读取文件时出现列表索引超出范围错误?

爬取数据和调整数据时列表索引超出范围

k元组排序中的python列表索引超出范围

Python - 索引错误 - 列表索引超出范围