Hjälp med felsökning - Python [LÖST]

Här diskuteras programmering och utveckling
Användarvisningsbild
cupe
Inlägg: 650
Blev medlem: 05 jun 2008, 07:10
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS

Hjälp med felsökning - Python [LÖST]

Inlägg av cupe »

Ett mycket märkligt problem som jag inte har kunnat lösa själv.
När jag kör programmet med;

python radio.py alternativt ./radio.py får jag denna output efter att ha valt "Spela Radio";
1) East FM
2) HardFM
3) RadioSeven
4) RockKlassiker
5) Vinyl
Traceback (most recent call last):
File "./radio.py", line 131, in <module>
menu()
File "./radio.py", line 27, in menu
radio()
File "./radio.py", line 79, in radio
templist[1] = templist[1].replace("NAME=", "")
IndexError: list index out of range
cupe ~/Dokument/Python $
Lustigt nog, när jag använder mig av min launcher i openbox som ser ut som följer;

urxvt -e python ~/Dokument/Python/radio.py

Går det av någon anledning utmärkt.

Programmet:

Kod: Markera allt

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Kräver mpg123 ; sudo apt-get install mpg123
# Ersätt mpg123 med valfri spelare
# Kräver moc; sudo apt-get install mocp
# Ersätt moc med valfri spelare
import os

global cfgpath
cfgpath = "radio.txt"

#Funktionen menu där du väljer vad du vill göra
def menu():
   
    os.system("clear")
    print ""
    print "-' Radio & Musik i konsolen, jippi! '-"
    print ""
    print "1) Spela Radio"
    print "2) Spela Lokal Musik"
    print ""
    print "Q) Avsluta"
    print ""
    val = raw_input("Val: ")

    if val =="1":
        radio()
    if val =="2":
        music()
    if val == "Q" or "q":
        quit()
       
#funktionen addradio som lägger till radiostationer i radio.txt
def addradio():
   
    #rensa skärmen
    os.system("clear")

    #öppnar fil och hämtar nuvarande id och sparar i thisid
    f = open(cfgpath)
    filedata = f.readlines()
    f.close()
    tempdata = filedata[len(filedata)-1].split(" ")
    tempdata[0] = tempdata[0].replace("ID=", "")
    id = int(tempdata[0])+1
    id = str(id)
    name = raw_input("Namn: ")
    url = raw_input("Url: ")
    f = open(cfgpath, "a")
    f.write("\nID="+id+" NAME="+name+" URL="+url)
    f.close()
    #rensa skärmen
    os.system("clear")
    print ""
    print "Station tillagd"
    print ""
    raw_input()
    radio()

#funktionen radio som har hand om radio-biten
def radio():

    #öppna och läsa fil
    f = open(cfgpath)
    filedata = f.readlines()
    f.close()

    #skapa nödvändiga variabler
    id=0
    urllist = list()
    #printa en padding ovanför
    os.system("clear")
    print ""
   
    #data loopen, bearbetar och sorterar data
    while id < len(filedata):
        templist = filedata[id].split(" ")
        templist[0] = templist[0].replace("ID=", "")
        templist[1] = templist[1].replace("NAME=", "")
        templist[1] = templist[1].replace("_", " ")
        templist[2] = templist[2].replace("URL=", "")
        templist[2] = templist[2].replace("\n", "")
   
        #printa menyn
        print templist[0]+") "+templist[1]
        #spara url i en lista
        urllist.append(templist[2])

        id=id+1

    print ""
    print "A) Spela egen ström"
    print "E) Lägg till station"
    print "M) Tillbaka till huvudmenyn"
    print "Q) Avsluta"
   
    val = raw_input("val: ")

    if val == "Q" or val == "q":
        #rensa skärmen
        os.system("clear")
        exit()
    elif val == "E" or val == "e":
        addradio()
    elif val == "M" or val == "m":
        menu()
    elif val == "A" or val == "a":
        os.system("clear")
        own_radio = raw_input("Mata in en egen stream: ")
           own_radio = own_radio.lower()
           os.system("mpg123 -@ "+own_radio)
        raw_input("")
        radio()
    elif len(val) != 0:
        os.system("clear")
        os.system("mpg123 -@ "+urllist[int(val)-1])
        raw_input("")
        radio()
    else:
        menu()

#funktionen music som har hand om övrig musik
def music():
    #rensa skärmen
    os.system("clear")
    music_location = raw_input("Ange sökväg till din musik: ")
    os.system("x-terminal-emulator -e mocp -m " + music_location)
    raw_input("")
    menu()
#programmet   
menu()

Några idéer?
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

Re: Hjälp med felsökning - Python

Inlägg av Smygis »

Kan man få din radio.txt också? Jag förstår inte riktigt hur man ska skapa en egen.
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Användarvisningsbild
cupe
Inlägg: 650
Blev medlem: 05 jun 2008, 07:10
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS

Re: Hjälp med felsökning - Python

Inlägg av cupe »

radio.txt :

Kod: Markera allt

ID=1 NAME=East_FM URL=mms://www.eastfm.se/eastfm
ID=2 NAME=HardFM URL=http://files.hard.fm/192.pls
ID=3 NAME=RadioSeven URL=http://www.radioseven.se/128.pls
ID=4 NAME=RockKlassiker URL=mms://live.alleredge.com/AE_Rockklassiker_Mid
ID=5 NAME=The_Voice URL=mms://live.alleredge.com/AT_TheVoiceSE_Mid
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

Re: Hjälp med felsökning - Python

Inlägg av Smygis »

Felet uppstår då radio.txt innehåller en sista rad med endast en radbrytning. Vilket innebär att om man försöker komma åt [1] på den raden blir ingen glad.

Kan lösas genom tex:

Kod: Markera allt

#funktionen radio som har hand om radio-biten
def radio():

    #öppna och läsa fil
    f = open(cfgpath)
    filedata = f.readlines()
    f.close()

    #skapa nödvändiga variabler
    urllist = list()
    #printa en padding ovanför
    os.system("clear")
    print ""
   
    #data loopen, bearbetar och sorterar data
    for p in filedata:
        if p == "\n":
            continue
        templist = p.split(" ")
        templist[0] = templist[0].replace("ID=", "")
        templist[1] = templist[1].replace("NAME=", "")
        templist[1] = templist[1].replace("_", " ")
        templist[2] = templist[2].replace("URL=", "")
        templist[2] = templist[2].replace("\n", "")
   
        #printa menyn
        print templist[0]+") "+templist[1]
        #spara url i en lista
        urllist.append(templist[2])

    print ""
    print "A) Spela egen ström"
    print "E) Lägg till station"
    print "M) Tillbaka till huvudmenyn"
    print "Q) Avsluta"
   
    val = raw_input("val: ")

    if val == "Q" or val == "q":
        #rensa skärmen
        os.system("clear")
        exit()
    elif val == "E" or val == "e":
        addradio()
    elif val == "M" or val == "m":
        menu()
    elif val == "A" or val == "a":
        os.system("clear")
        own_radio = raw_input("Mata in en egen stream: ")
        own_radio = own_radio.lower()
        os.system("mpg123 -@ "+own_radio)
        raw_input("")
        radio()
    elif len(val) != 0:
        os.system("clear")
        os.system("mpg123 -@ "+urllist[int(val)-1])
        raw_input("")
        radio()
    else:
        menu()
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Skriv svar

Återgå till "Programmering och webbdesign"