IndexError:列表索引超出范围(请帮助修复)

时间:2014-08-24 06:56:56

标签: python regex python-2.7

我是python的新手,正在为我遇到的问题寻求帮助。我有一个程序,需要刷新和抓取时间并使用它的东西。以下是查找时间的代码:

def findNST(html):
    NST = re.findall(r'<td id="nst">(.*) am', html)
    if NST == []:
        NST = re.findall(r'<td id="nst">(.*) pm', html)
    p = re.compile('\d+')
    Times = p.findall(NST[0])
    return NST, Times

我遇到的问题是有时刷新时。它的获取和错误页面或空白页面,然后我收到此错误:

Traceback (most recent call last):
File "C:\Python27\Bot folder\frankie\client.py", line 166, in <module>
Times = find_firstrs()
File "C:\Python27\Bot folder\frankie\client.py", line 81, in find_firstrs
NST, Times = findNST(html)
File "C:\Python27\Bot folder\frankie\client.py", line 50, in findNST
Times = p.findall(NST[0])
 IndexError: list index out of range

有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

IndexError: list index out of range表示NST是一个空列表,从您的代码中可以看出,html中没有任何正则表达式匹配。

答案 1 :(得分:0)

简单的解决方法是在实际尝试访问NST之前检查NST:

if NST: # check we have data before indexing
    Times = p.findall(NST[0])

根据提供的代码判断,我会找到更好的代码来学习,变量名称应该是小写的,函数名称使用下划线:

def find_nst(html):
    nst = re.findall(r'<td id="nst">(.*) am', html)
    if not nst: # same as if ast == []
        nst = re.findall(r'<td id="nst">(.*) pm', html)
    p = re.compile('\d+')
    if nst: # if nst is not empty
        times = p.findall(nst[0])
    else:
        times = []
    return nst, times

根据代码的其他部分对返回值的处理方式,您可能希望为时间返回不同的默认值。