我一直收到错误'IndexError:list index out of range'
不确定我做错了什么,它适用于一对夫妇运行错误 我唯一能想到的是,我得到的名字对于变量而言太长了
mylist = [x +'.mp3' for x in re.findall(r'file=(.*?).mp3',the_webpage)]
#Remove Duplicates
if mylist:
mylist.sort()
last = mylist[-1]
for i in range(len(mylist)-3, -1, -1):
if last == mylist[i]:
del mylist[i]
else:
last = mylist[i]
print " "
#takes the quotes out of the string
#ti = titl1[0]
n1 = titl1[0]
n2 = song1[0]
#sg = song1
sname = "".join(tuple(n1 + "-" + n2 + ".mp3"))
print sname
url = mylist[0]
结果
Traceback (most recent call last):
File "grub.py", line 59, in <module>
url = mylist[0]
IndexError: list index out of range
答案 0 :(得分:6)
您的IndexError
表示mylist
为空,这意味着您可能删除了比您想要的更多元素(或者您的列表开头为空)。要排序和删除重复项,您可以执行
mylist = sorted(set(mylist))
即使这样,也不能保证你不会得到一个空列表(如果你的列表开始是空的,它不会神奇地获得更多的元素)。在尝试分配url
之前,您还可以确保列表不为空:
#"Look Before You Leap" (LBYL)
if mylist:
url = mylist[0]
else:
url = '???'
然而,有些(大多数)会认为try
- except
条款更像是“pythonic”......
#Maybe it's "Easier to Ask Forgiveness than Permission" ... (EAFP)
try:
url = mylist[0]
except IndexError:
url = '???'
答案 1 :(得分:0)
这通常意味着mylist
没有索引0,这可能意味着它实际上并不像您认为的那样是一个列表。你有一个if mylist
条件,这表明可能存在一些未定义mylist的情况。也许这是其中一个案例?