我正在使用 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.
我该怎么办?我应该使用异常处理吗?或者有更简单的方法吗?
有什么建议吗?任何帮助都会非常棒!
答案 0 :(得分:198)
处理异常是要走的路:
try:
gotdata = dlist[1]
except IndexError:
gotdata = 'null'
当然,您也可以查看len()
的{{1}};但处理异常更直观。
答案 1 :(得分:28)
你有两种选择;处理异常或测试长度:
if len(dlist) > 1:
newlist.append(dlist[1])
continue
或
try:
newlist.append(dlist[1])
except IndexError:
pass
continue
如果经常没有第二项,则使用第一项,如果有时没有第二项,则使用第二项。
答案 2 :(得分:17)
三元就足够了。改变:
gotdata = dlist[1]
到
gotdata = dlist[1] if len(dlist) > 1 else 'null'
这是一种较短的表达方式
if len(dlist) > 1:
gotdata = dlist[1]
else:
gotdata = 'null'
答案 3 :(得分:3)
参考ThiefMaster♦有时我们会得到一个错误,其值为'\ n'或null,并执行处理ValueError所需的错误:
处理异常是要走的路
try:
gotdata = dlist[1]
except (IndexError, ValueError):
gotdata = 'null'
答案 4 :(得分:1)
for i in range (1, len(list))
try:
print (list[i])
except ValueError:
print("Error Value.")
except indexError:
print("Erorr index")
except :
print('error ')
答案 5 :(得分:1)
对任何对此更短的方式感兴趣的人:
gotdata = len(dlist)>1 and dlist[1] or 'null'
但为了获得最佳性能,我建议使用False代替&#39; null&#39;然后进行一行测试就足够了:
gotdata = len(dlist)>1 and dlist[1]