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

我正在使用BeautifulSoup并parsing一些HTML。

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

问题是,一些HTML有不同的格式(他们没有我想要的数据)

所以,我试图使用exception处理,并将值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'> ,所以我想要做的就是将stringnull添加到列表。

出现此错误:

 list index out of range. 

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

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

但是这并不奏效。 它仍然显示错误:

 list index out of range. 

我应该怎么做呢? 我应该使用exception处理吗? 或者有没有更简单的方法?

有什么build议么? 任何帮助将是非常好的!

处理exception是要走的路:

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

当然你也可以检查dlistlen() 但处理exception更直观。

你有两个select, 处理exception或testing长度:

 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'或为空,并执行处理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' 

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

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