|
Python tanuláskor kissé bonyolult lehet megérteni a Python hibaüzeneteinek jelentését. Íme néhány gyakori futási idejű hibák listája, amelyek miatt a programod összeomlik.
1) Elfelejtettem hozzáadni :( az if, elif, else, for, while, class, def A hiba ilyen kódban fog megjelenni: if spam == 42 print ("Hello!") 2) Használd = helyett == (ami "SyntaxError: invalid syntax" eredménye) = a kijelölő operátor, és == egyenlő az összehasonlító művelettel.A hiba ilyen kódban fordul elő: ha spam = 42: print ("Hello!") 3) Helytelen behúzás használata. (Ennek eredményeként "IndentationError:unexpected behúzás", "IndentationError:unindent nem egyezik meg semmilyen külső behúzási szinttel", és "IndentationError:expected an indented block") Ne feledjük, hogy a behúzást csak olyan mondatok után használják, amelyek a következők végződésével végződnek: utána a behúzás formátumát vissza kell állítani az előző behúzási formátumra. A hiba ilyen kódban fordul elő: print ("Hello!") print ("Szia!") Vagy: if spam == 42: print ("Hello!") print ("Szia!") Vagy: if spam == 42: print ("Hello!") 4) Elfelejtés len() hívni a for hurok-állításban (ami a "TypeError: "list" objektumot nem lehet egész számként értelmezni) Általában egy lista vagy string elemen keresztül akarsz iterálni egy indexen keresztül, ami a range() függvényt kell hívni. Ne felejtsd el visszaadni a len értéket a lista helyett. A hiba ilyen kódban fordul elő: spam = ["macska", "kutya", "egér"] Az i hatótávolságban (spam): print(spam) 5) Próbáld meg módosítani a string értékét (ami "TypeError: "str" object doesn't support item assignment) A string egy változatlan adattípus, és a hiba ilyen kódban fordul elő: spam = "Van egy háziállat macskám." spam[13] = "r" print(spam) És tényleg ezt akarod megtenni: spam = "Van egy háziállat macskám." spam = spam[:13] + "r" + spam[14:] print(spam) 6) Próbálkozni nem stringértékekkel összekapcsolni (ami a "TypeError: Can't convert't under "int" object to str implicitively A hiba ilyen kódban fordul elő: numEggs = 12 print ("Van " + numEggs + " eggs.") És tényleg ezt akarod megtenni: numEggs = 12 print ("Van " + str(numEggs) + " eggs.") Vagy: numEggs = 12 print("Van %s tojásom." % (numEggs)) 7) Elfelejtés idézőjeleket tenni a sorozat elejére és végére (ami "SyntaxError: EOL while scanting literal string" (SyntaxError: EOL while scanting literal string) A hiba ilyen kódban fordul elő:
print (Szia!") Vagy: print ("Szia!) Vagy: myName = "Al" print("A nevem " + myName + . Hogy vagy?") 8) Változó- vagy függvénynevek helyesírása (ami "NameError: name "fooba" nem definiált) A hiba ilyen kódban fordul elő: foobar = "Al" print ("A nevem " + fooba) Vagy: spam = ruond(4.2) Vagy: spam = Kör (4.2) 9) Metódusnevek helyesírása (ami "AttributeError: "str" objektumnak nincs "lowerr" attribútumja) A hiba ilyen kódban fordul elő: spam = "EZ KISBETŰVEL VAN." spam = spam.lowerr() 10) A hivatkozások meghaladják a lista maximális indexét (így "IndexError: list index out of range") A hiba ilyen kódban fordul elő: spam = ["macska", "kutya", "egér"] print(spam[6]) 11) Egy szótárkulcs érték használata, amely nem létezik (ami "KeyError: 'spam'" eredményét eredményezi) A hiba ilyen kódban fordul elő: spam = {"macska": "Zophie", "kutya": "Bazsalikum", "egér": "Bajusz"} print("A háziállat zebrám neve" + spam["zebra"]) 12) Python kulcsszó próbálkozása változónévként (ami "SyntaxError: invalid syntax" eredménye) A Python kulcs nem használható változónévként, a hiba ilyen kódban jelentkezik: osztály = "algebra" Python3 kulcsszavak: és, 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, Igaz, próbáld meg, miközben enged
13) Értéknövelő operátorok használata egy definiált új változóban (ami a "NameError: name "foobar" nem definiált) Ne használj 0 vagy null stringeket kezdeti értékként változók deklarálásakor úgy, hogy egy mondat spam += 1 önnövelő operátorral egyenlő legyen spam = spam + 1-gyel, ami azt jelenti, hogy a spamnek érvényes kezdeti értéket kell megadnia. A hiba ilyen kódban fordul elő: spam = 0 spam += 42 tojás += 42 14) Helyi változók használata függvényekben a lokális változók meghatározása előtt (ebben az esetben létezik egy globális változó, amelynek ugyanaz a nevű volt, mint a helyi változónak) (így jön létre a "UnboundLocalError: local variable "foobar" hivatkozva a kijelölés előtt) Bonyolult egy lokális változót használni egy függvényben, amelynek ugyanaza nevű a globális változó, és a használati szabályok a következők: ha valami definiálva van egy függvényben, ha csak a függvényben használják, akkor lokális, és fordítva. Ez azt jelenti, hogy nem használhatod egy függvényben globális változóként a definiálás előtt. A hiba ilyen kódban fordul elő: someVar = 42 def myFunction(): print (someVar) someVar = 100 myFunction() 15) Egész számlista létrehozása range() esetén (ami a "TypeError: "range" objektum nem támogatja az item assignment assignment-ot) Néha egy rendezett egész számlistát szeretnél szerezni, így a range() jó módnak tűnik ennek a listának generálására. Azonban ne feledd, hogy a range() egy "range objektumot" ad vissza, nem a tényleges lista értéket. A hiba ilyen kódban fordul elő: spam = távolság(10) spam[4] = -1 Talán ezt szeretnéd csinálni: spam = lista (range(10)) spam[4] = -1 (Megjegyzés: spam = range(10) működik a Python 2-ben, mert a Python 2-ben a range() listaértéket ad vissza, de a Python 3-ban a fenti hiba keletkezik) 16) Szép ++ vagy -- önnövelő operátor. (Ennek eredményeként "SyntaxError: invalid syntax") Ha más nyelvekhez vagy szokva, például C++, Java, PHP stb., érdemes lehet ++ vagy -- increment és levonás módot használni egy változót. A Pythonban nincs ilyen operátor. A hiba ilyen kódban fordul elő: spam = 1 spam++ Talán ezt szeretnéd csinálni: spam = 1 spam += 1 17) Elfelejtettem hozzáadni az önparamétert a metódus első argumentumához (ami következik: "TypeError: myMethod() nem vesz érvelést (1 megadva)") A hiba ilyen kódban fordul elő: class Foo(): def myMethod(): print ("Hello!") a = Foo() a.myMethod()
|