我想异常处理“列表索引超出范围”。
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
有些链接没有任何<dd class='title'>
,所以我想要将字符串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'
当然你也可以查看dlist
的len()
;但处理异常更直观。
【讨论】:
【参考方案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
如果经常没有第二项,则使用第一项,如果有时没有第二项,则使用第二项。
【讨论】:
以上是关于我想异常处理“列表索引超出范围”。的主要内容,如果未能解决你的问题,请参考以下文章