|
Pri učenju Pythona je lahko nekoliko zapleteno razumeti pomen sporočil o napakah v Pythonu. Tukaj je seznam nekaterih pogostih napak med izvajanjem, ki povzročijo zrušitev programa.
1) Pozabil sem dodati :( na koncu if, elif, else, for, while, class, def def def. Napaka se bo pojavila v kodi takole: če spam == 42 tisk ("Pozdravljeni!") 2) Uporabite = namesto == (kar povzroči "SyntaxError: vel syntax") = je operator dodelitve in == je enak operaciji primerjave.Napaka se pojavi v kodi takole: če spam = 42: tisk ("Pozdravljeni!") 3) Nepravilna uporaba zamika. (Kar povzroči "IndentationError:unexpected indent", "IndentationError:unindent doesn't match any outer indetation level" in "IndentationError:expected an indented block") Ne pozabite, da se zamik uporablja šele po stavkih, ki se končajo z : nato pa je treba obliko zamika vrniti na prejšnjo obliko zamikanja. Napaka se pojavi v kodi takole: tisk ("Pozdravljeni!") tisk ("Živjo!") Ali: če spam == 42: tisk ("Pozdravljeni!") tisk ("Živjo!") Ali: če spam == 42: tisk ("Pozdravljeni!") 4) Pozabljanje klica len() v ukazu for loop (kar povzroči "TypeError: objekt "list" ni mogoče interpretirati kot celo število) Običajno želite iterirati čez seznam ali niz skozi indeks, kar zahteva klic funkcije range(). Ne pozabite vrniti vrednosti len namesto tega seznama. Napaka se pojavi v kodi takole: spam = ["mačka", "pes", "miš"] Za I v dosegu (spam): print(spam) 5) Poskusite spremeniti vrednost niza (kar povzroči "TypeError: objekt "str" ne podpira dodeljevanja elementov") String je nespremenljiv podatkovni tip, napaka pa se pojavi v kodi, kot je ta: spam = "Imam mačko za hišnega ljubljenčka." spam[13] = "r" print(spam) In to si dejansko želite narediti: spam = "Imam mačko za hišnega ljubljenčka." spam = spam[:13] + "r" + spam[14:] print(spam) 6) Poskus povezovanja ne-niznih vrednosti z nizi (kar povzroči "TypeError: Ne moremo implicitno pretvoriti objekta "int" v str) Napaka se pojavi v kodi takole: numEggs = 12 print ("Imam " + numEggs + " jajca.") In to si dejansko želite narediti: numEggs = 12 print("Imam " + str(numEggs) + " jajca.") Ali: numEggs = 12 print("Imam %s jajca." % (numEggs)) 7) Pozabljanje narekovajev na začetku in koncu niza (kar povzroči "SyntaxError: EOL med skeniranjem string literal") Napaka se pojavi v kodi takole:
print (Pozdravljeni!") Ali: tisk ("Pozdravljeni!) Ali: myName = "Al" print ("Moje ime je " + mojeIme + . Kako si?") 8) Napačno črkovanje imen spremenljivk ali funkcij (kar povzroči "NameError: ime "fooba" ni definirano") Napaka se pojavi v kodi takole: foobar = "Al" print ("Moje ime je " + fooba) Ali: spam = ruond(4.2) Ali: spam = krog (4.2) 9) Napačno črkovanje imen metod (kar povzroči "AttributeError: objekt "str" nima atributa "lowerr") Napaka se pojavi v kodi takole: spam = "TO JE V MALIH ČRKAH." spam = spam.lowerr() 10) Reference presegajo največji indeks seznama (kar povzroči "IndexError: indeks seznama izven območja") Napaka se pojavi v kodi takole: spam = ["mačka", "pes", "miš"] print(spam[6]) 11) Uporaba slovarske ključne vrednosti, ki ne obstaja (kar povzroči "KeyError: 'spam'") Napaka se pojavi v kodi takole: spam = {"cat": "Zophie", "dog": "Basil", "mouse": "Whiskers"} print ("Ime moje hišne zebre je " + spam["zebra"]) 12) Poskus uporabe Python ključne besede kot imena spremenljivke (kar povzroči "SyntaxError: invalid syntax") Python ključa ni mogoče uporabiti kot ime spremenljivke, napaka se pojavi v kodi takole: razred = "algebra" Ključne besede v Python3 so: in, as, assert, break, class, continue, def, del, elif, else, except, False, final, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, Res je, poskusi, medtem ko z, predaj
13) Uporaba operatorjev z dodano vrednostjo v definirani novi spremenljivki (kar povzroči "NameError: ime "foobar" ni definirano") Ne uporabljajte niza 0 ali ničelnih nizov kot začetnih vrednosti pri deklaraciji spremenljivk, tako da je stavka spam += 1 z uporabo samonaraščajočega operatorja enaka spam = spam + 1, kar pomeni, da mora spam določiti veljavno začetno vrednost. Napaka se pojavi v kodi takole: spam = 0 spam += 42 jajca += 42 14) Uporabite lokalne spremenljivke v funkcijah pred definiranjem lokalnih spremenljivk (v tem primeru obstaja globalna spremenljivka z enakim imenom kot lokalna spremenljivka) (kar vodi v "UnboundLocalError: local variable "foobar" referencirana pred dodelitvijo") Uporaba lokalne spremenljivke v funkciji z enakim imenom kot globalna spremenljivka je zapletena, pravila uporabe pa so: če je kaj definirano v funkciji, če se uporablja samo v funkciji, je lokalno, in obratno. To pomeni, da je ne morete uporabiti v funkciji kot globalno spremenljivko, preden jo definirate. Napaka se pojavi v kodi takole: someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction() 15) Poskus ustvarjanja celoštevilskega seznama z range() (kar povzroči "TypeError: objekt "range" ne podpira dodeljevanja elementov") Včasih želiš dobiti urejen seznam celih števil, zato se range() zdi dober način za generiranje tega seznama. Vendar morate vedeti, da range() vrne "range object", ne pa dejanske vrednosti seznama. Napaka se pojavi v kodi takole: spam = razpon(10) spam[4] = -1 Morda je to tisto, kar želiš narediti: spam = list(range(10)) spam[4] = -1 (Opomba: spam = range(10) deluje v Pythonu 2, ker v Pythonu 2 range() vrne vrednost seznama, medtem ko se v Pythonu 3 generira zgornja napaka) 16) Nice in ++ ali -- operator samoinkrementa. (Kar povzroči "SyntaxError: neveljavna sintaksa") Če ste vajeni drugih jezikov, kot so C++, Java, PHP itd., morda poskusite uporabiti ++ ali -- inkrement in odštevanje spremenljivke. V Pythonu takšnega operatorja ni. Napaka se pojavi v kodi takole: spam = 1 spam++ Morda je to tisto, kar želiš narediti: spam = 1 spam += 1 17) Pozabil sem dodati parameter self k prvemu argumentu metode (kar je povzročilo "TypeError: myMethod() ne sprejema argumentov (1 dan)") Napaka se pojavi v kodi takole: razred Foo(): def myMethod(): tisk ("Pozdravljeni!") a = Foo() a.myMethod()
|