我是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
有人可以帮我解决这个问题。
答案 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
根据代码的其他部分对返回值的处理方式,您可能希望为时间返回不同的默认值。