bild
Skolan för
elektroteknik
och datavetenskap

Svar på vanliga frågor

  1. IDLE fungerar inte bra på min hemmadator. Finns det något alternativ?
    Svar: Här finns en lista med redigeringsprogram.



  2. Var ligger datorsalarna?
    Svar: Salar med färgnamn (Gul & Brun) ligger på Osquars backe 2 (E-huset), V-salarna på Teknikringen 76 (V-huset). Titta gärna på kartan


  3. Vilken version av Python används i kursen?
    Svar: Både Python 2.6 och Python 3.1 finns i V-salarna. Använd 2.6 om du har andra upplagan av kursboken och 3.1 om du har tredje upplagan.



Att få print-satser att fungera som man vill

  1. Jag vill inte ha ny rad mellan min utskrifter.
    Python 2:Skriv ett komma(,) efter print-satsen, t ex
    print "Strumpor och",


    Python 3:Parametern end i print-satsen anger vad raden ska avslutas med. Exempel:
    print("Strumpor och", end="")


  2. Jag försöker skriva ut en rad streck med en slinga (i Python 2), men får mellanslag mellan varje tecken, så här - - -, istället för ---. Hur ska jag göra för att Python inte ska lägga in mellanslagen automatiskt?
    I modulen sys finns en variabel som inför varje print håller reda på om ett mellanslag ska skrivas ut eller inte. Man kan själv ställa om variabeln så här:
    import sys
    for i in range(5): 
        print "-",
        sys.stdout.softspace = False
    

  3. När jag läst in en rad från fil och skriver ut den på skärmen så skrivs en extra tomrad ut.
    Varje rad du läser in från filen har ett radbrytningtecken "\n" i slutet. Du får enklast bort detta genom att på varje rad du läser från filen använda funktionen strip(). I stället för:
    raden = filen.readline()
    skriver du:
    raden = filen.readline.strip()


  4. Hur gör man formatterad utskrift?
    Exempel:
       print "      Sko      Storlek    Pris"
       print " %10s%8i%12.2f"%(skonamn,storlek,pris)
    
    Här är skonamn en sträng som skrivs ut i tio positioner (%10s), storlek ett heltal som skrivs ut i åtta positioner (%8i) och pris ett flyttal som skrivs ut i tolv positioner med två decimaler (%12.2f).
    Per Sedholm har gjort en urförligare beskrivning av formatterad utskrift.
    (Officiell dokumentation på engelska finns på http://docs.python.org/lib/typesseq-strings.html.)

Felmeddelanden

  1. Felmeddelandet "Already executing"
    När du kör program från IDLE kan du avbryta en gammal körning med Ctrl-C innan du kör programmet igen.


  2. Felmeddelandet "TypeError: cannot concatenate 'str'and int'objects"
    Om du skriver ut både strängar och tal i samma print-sats ska du konvertera talen till strängar så här:
    print frukten + " kostar " + str(pris)


  3. Felmeddelandet "invalid_syntax"
    Om du inte ser felet direkt kan felet vara på raden innan.
    • Har du glömt kolon(:) på raden innan om du använder if, while eller for?
    • Har du tabbat in raderna efter kolon?
    • Saknas ett citattecken, en parentes () eller en klammer [] på raden innan?
    • Kolla tabbar, även kommentarer med tre '-tecken måste tabbas rätt! Matcha med det stycke ovan som ska ha samma intabbning.
    • Python har rätt, det finns ett fel någonstans!


  4. Jag har skrivit en klass och får felmeddelandet "NameError: global name 'namn' is not defined"
    Har du kommit ihåg att skriva self framför alla förekomster av dina attribut?


  5. Felmeddelandet "TypeError: sort() takes no keyword arguments"
    när du försöker sortera en lista med objekt.

    Kör du en gammal version av Python? Sortering med "key" finns i Python 2.4 och senare.


  6. Felmeddelandet "TypeError: 'int' object is not callable"
    eller "TypeError: 'str' object is not callable"

    Om du har definierat en klass kan detta felmeddelande bero på att ett attribut har samma namn som en metod. Byt namn på metoden!


Andra fel

  1. "None" skrivs ut på skärmen.
    En funktion utan return-sats returnerar None. Troligen har du råkat anropa en sån funktion i en print-sats, t ex
    print skriv_ut()
    Lösningen är att anropa funktionen utan print (eller låta funktionen returnera den sträng som ska skrivas ut).


  2. Min if-sats fungerar inte som den ska.
    Felet kan bero på:
    • Att datatyperna inte stämmer överens, till exempel är strängen "1" inte detsamma som heltalet 1.
    • Om du läst in rader från en fil som du jämför i if-satsen kan problemet vara ett "\n" sist i den inlästa raden. Städa bort det med raden.strip()


  3. Nyckeln jag söker efter i en dictionary fungerar inte.
    Om du läst in nycklarna från en fil kan det vara ett "\n" sist i den inlästa raden som måste städas bort med strip


  4. När jag läser in filen så läses inget in, men det har fungerat förut.
    Kontrollera att filen finns. öppna filen (med t ex WordPad) och kolla så den innehåller något. Spara och stäng filen igen.


  5. Jag använder sys.exit() för att avbryta programmet, men då får jag en massa röd text i IDLE.
    Lägg in en
    try: ... except SystemExit:
    runt ditt anrop av main så slipper du den röda texten.


  6. Plats för ny fråga:
    Svar:


Copyright © Sidansvarig: Linda Kann <linda@nada.kth.se>
Uppdaterad 2011-01-19