2

「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
4

2 に答える 2

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 = '???'
于 2012-08-17T16:38:48.843 に答える
0

これが一般的に意味することmylistは、インデックス 0 がないことです。これは、実際にはあなたが考えているようなリストではないことを意味する場合があります。これは、if mylistmylist が未定義になる場合があることを示唆しています。多分これはそれらのケースの1つですか?

于 2012-08-17T16:37:49.417 に答える