|
Når man lærer Python, kan det være litt komplisert å forstå betydningen av Pythons feilmeldinger. Her er en liste over noen vanlige kjøretidsfeil som får programmet ditt til å krasje.
1) Glemte å legge til :( på slutten av if, elif, ellers, for, while, time, def def def. Feilen vil oppstå i kode som dette: hvis spam == 42 print ("Hello!") 2) Bruk = i stedet for == (resulterer i "SyntaxError: invalid syntax") = er tilordningsoperatoren og == er lik sammenligningsoperasjonen.Feilen oppstår i kode som dette: hvis spam = 42: print ("Hello!") 3) Feil bruk av innrykk. (Dette resulterer i "Innrykkfeil: uventet innrykk", "InnrykningFeil: innrykk samsvarer ikke med noe ytre indetasjonsnivå", og "Innrykkfeil: forventet en innrykket blokk") Husk at innrykk kun brukes etter setninger som slutter med: hvoretter innrykksformatet må tilbakeføres til det forrige innrykksformatet. Feilen oppstår i kode som dette: print ("Hello!") print ("Howdy!") Eller: hvis spam == 42: print ("Hello!") print ("Howdy!") Eller: hvis spam == 42: print ("Hello!") 4) Glemmer å kalle len() i for loop-setningen (noe som resulterer i "TypeError: "list"-objektet kan ikke tolkes som et heltall") Vanligvis vil du iterere over en liste eller streng gjennom en indeks, noe som krever at du kaller range()-funksjonen. Husk å returnere len-verdien i stedet for å returnere denne listen. Feilen oppstår i kode som dette: spam = ["katt", "hund", "mus"] For i innen rekkevidde (spam): Skriv ut (spam) 5) Prøv å endre verdien til strengen (noe som resulterer i "TypeError: "str"-objektet støtter ikke elementtildeling") String er en uforanderlig datatype, og feilen oppstår i kode som dette: spam = "Jeg har en katt." spam[13] = "r" Skriv ut (spam) Og du vil faktisk gjøre dette: spam = "Jeg har en katt." spam = spam[:13] + "r" + spam[14:] Skriv ut (spam) 6) Forsøk på å sammensette ikke-streng-verdier med strenger (noe som resulterer i "TypeError: Can"t convert "int"-objekt til str implisitt") Feilen oppstår i kode som dette: numEggs = 12 print ("Jeg har " + numEgg + " egg.") Og du vil faktisk gjøre dette: numEggs = 12 print("Jeg har " + str(numEggs) + " eggs.") Eller: numEggs = 12 print("Jeg har %s egg." % (numEggs)) 7) Glemmer å sette anførselstegn i begynnelsen og slutten av strengen (noe som resulterer i "SyntaxError: EOL while can string literal") Feilen oppstår i kode som dette:
print (Hallo!") Eller: print ("Hallo!) Eller: myName = "Al" print("Mitt navn er " + mittnavn + . Hvordan har du det?") 8) Feilstaving av variabel- eller funksjonsnavn (som resulterer i "NameError: name "fooba" er ikke definert") Feilen oppstår i kode som dette: foobar = "Al" print ("Mitt navn er " + fooba) Eller: spam = ruond(4.2) Eller: spam = Runde(4.2) 9) Feilstaving av metodenavn (som resulterer i "AttributeError: "str"-objektet har ikke attributt "lowerr"") Feilen oppstår i kode som dette: spam = "DETTE ER MED SMÅ BOKSTAVER." spam = spam.lowerr() 10) Referanser overstiger listens maksimale indeks (noe som resulterer i "IndexError: list index out of range") Feilen oppstår i kode som dette: spam = ["katt", "hund", "mus"] print(spam[6]) 11) Bruk av en ordboknøkkelverdi som ikke eksisterer (noe som resulterer i "KeyError: 'spam'") Feilen oppstår i kode som dette: spam = {"cat": "Zophie", "dog": "Basil", "mouse": "Whiskers"} print ("Navnet på min kjæledyr-sebra er " + spam["zebra"]) 12) Forsøk på å bruke Python-nøkkelord som variabelnavn (resulterer i "SyntaxError: invalid syntax") Python-nøkkelen kan ikke brukes som variabelnavn, feilen oppstår i kode som dette: klasse = "algebra" Python3-nøkkelordene er: og, som, assert, break, class, continue, def, del, elif, else, except, False, tilslutt, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, Sant, prøv, mens, med, gi etter
13) Bruk av verdiøkende operatorer i en definert ny variabel (som resulterer i "NameError: name "foobar" er ikke definert") Ikke bruk 0- eller nullstrenger som startverdier når du erklærer variabler, slik at en setningspam += 1 med selvinkrementerende operator er lik spam = spam + 1, noe som betyr at spam må spesifisere en gyldig startverdi. Feilen oppstår i kode som dette: spam = 0 spam += 42 egg += 42 14) Bruk lokale variabler i funksjoner før du definerer lokale variabler (i dette tilfellet finnes det en global variabel med samme navn som den lokale variabelen) (noe som resulterer i "UnboundLocalError: lokal variabel "foobar" referert til før tildeling") Det er komplisert å bruke en lokal variabel i en funksjon med samme navn som en global variabel, og bruksreglene er: hvis noe er definert i en funksjon, hvis det kun brukes i funksjonen, er det lokalt, og omvendt. Dette betyr at du ikke kan bruke den i en funksjon som en global variabel før du definerer den. Feilen oppstår i kode som dette: someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction() 15) Forsøk på å lage en heltallsliste med range() (som resulterer i "TypeError: "range"-objektet støtter ikke elementtildeling) Noen ganger vil du ha en ordnet liste med heltall, så range() virker som en god måte å generere denne listen på. Men du må huske at range() returnerer et "range-objekt", ikke den faktiske listeverdien. Feilen oppstår i kode som dette: spam = rekkevidde(10) spam[4] = -1 Kanskje dette er det du vil gjøre: spam = liste(rekkevidde(10)) spam[4] = -1 (Merk: spam = range(10) fungerer i Python 2, fordi range() i Python 2 returnerer en listeverdi, men i Python 3 genereres feilen ovenfor) 16) Nice i ++ eller -- selvinkrementerende operator. (Resulterer i "SyntaxError: ugyldig syntaks") Hvis du er vant til andre språk som C++, Java, PHP osv., kan du prøve å bruke ++ eller -- øke og trekke fra en variabel. Det finnes ingen slik operator i Python. Feilen oppstår i kode som dette: spam = 1 spam++ Kanskje det er det du vil gjøre: spam = 1 spam += 1 17) Glemte å legge til selvparameteren til det første argumentet i metoden (noe som resulterte i "TypeError: myMethod() tar ingen argumenter (1 gitt)") Feilen oppstår i kode som dette: klasse Foo(): def myMethod(): print ("Hello!") a = Foo() a.myMethod()
|