|
Pri učení sa Pythonu môže byť trochu zložité pochopiť význam chybových hlásení v Pythone. Tu je zoznam niektorých bežných chýb za behu, ktoré spôsobujú pád programu.
1) Zabudol som pridať :( na konci if, elif, else, for, while, class, def def def def. Chyba sa vyskytne v kóde takto: ak spam == 42 print ("Hello!") 2) Použiť = namiesto == (čo vedie k "SyntaxError: neplatná syntax") = je priraďovací operátor a == je rovná porovnávacej operácii.Chyba sa vyskytuje v kóde takto: ak spam = 42: print ("Hello!") 3) Nesprávne použitie odsadenia. (Čo vedie k "IndentationError:unexpected indent", "IndentationError:unindent doesn't match any outer indetation level" a "IndentationError:expected an indented block") Pamätajte, že odsadenie sa používa iba po vyjadreniach končiacich na: po ktorých sa formát odsadenia musí vrátiť na predchádzajúci odsadenie. Chyba sa vyskytuje v kóde takto: print ("Hello!") tlač ("Ahoj!") Alebo: ak spam == 42: print ("Hello!") tlač ("Ahoj!") Alebo: ak spam == 42: print ("Hello!") 4) Zabudnutie volať len() v príkaze for loop (čo vedie k "TypeError: objekt "list" nemožno interpretovať ako celé číslo") Zvyčajne chcete iterovať zoznam alebo reťazec cez index, čo vyžaduje volanie funkcie range(). Nezabudnite vrátiť hodnotu len namiesto vrátenia tohto zoznamu. Chyba sa vyskytuje v kóde takto: spam = ["mačka", "pes", "myš"] Pre I v dosahu (spam): print(spam) 5) Skúste upraviť hodnotu reťazca (čo vedie k "TypeError: objekt "str" nepodporuje priradenie položky") reťazec je nemenný dátový typ a chyba sa vyskytuje v kóde takto: spam = "Mám mačku." spam[13] = "r" print(spam) A naozaj to chcete urobiť: spam = "Mám mačku." spam = spam[:13] + "r" + spam[14:] print(spam) 6) Pokus spojiť hodnoty mimo reťazca s reťazcami (čo vedie k "TypeError: Nedá sa implicitne previesť objekt "int" na str) Chyba sa vyskytuje v kóde takto: numEggs = 12 print("Mám " + numEggs + " vajcia.") A naozaj to chcete urobiť: numEggs = 12 print("Mám " + str(numEggs) + " vajcia.") Alebo: numEggs = 12 print("Mám %s vajíčok." % (numEggs)) 7) Zabudnutie dať úvodzovky na začiatok a koniec reťazca (čo vedie k "SyntaxError: EOL pri skenovaní string literal") Chyba sa vyskytuje v kóde takto:
tlač (Ahoj!") Alebo: tlač ("Ahoj!) Alebo: myName = "Al" tlač ("Moje meno je " + mojeMeno + . Ako sa máš?") 8) Nesprávne napísané mená premenných alebo funkcií (čo vedie k "NameError: name "fooba" nie je definovaný") Chyba sa vyskytuje v kóde takto: foobar = "Al" tlač ("Volám sa " + fooba) Alebo: spam = ruond(4.2) Alebo: spam = kolo (4.2) 9) Nesprávne napísané názvy metód (čo vedie k "AttributeError: objekt "str" nemá atribút "lowerr"") Chyba sa vyskytuje v kóde takto: spam = "TOTO JE MALÝM PÍSMENOM." spam = spam.lowerr() 10) Referencie prekročia maximálny index zoznamu (čo vedie k "IndexError: index zoznamu mimo rozsahu") Chyba sa vyskytuje v kóde takto: spam = ["mačka", "pes", "myš"] print(spam[6]) 11) Použitie slovníkovej kľúčovej hodnoty, ktorá neexistuje (čo vedie k "KeyError: 'spam'") Chyba sa vyskytuje v kóde takto: spam = {"cat": "Zophie", "dog": "Basil", "mouse": "Whiskers"} print("Meno mojej zebry je " + spam["zebra"]) 12) Pokus použiť kľúčové slovo v Pythone ako názov premennej (čo vedie k "SyntaxError: invalid syntax") Python kľúč nie je možné použiť ako názov premennej, chyba sa vyskytuje v kóde takto: trieda = "algebra" Kľúčové slová Python3 sú: a, as, assert, break, class, continue, def, del, elif, else, except, False, konečne, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, Pravda, skús, zatiaľ čo s, ustúp
13) Použitie operátorov s pridanou hodnotou v definovanej novej premennej (čo vedie k "NameError: názov "foobar" nie je definovaný") Pri deklarácii premenných nepoužívajte 0 ani nulové reťazce ako počiatočné hodnoty, takže veta spam += 1 pomocou samo-inkrementujúceho operátora je rovná spam = spam + 1, čo znamená, že spam musí špecifikovať platnú počiatočnú hodnotu. Chyba sa vyskytuje v kóde takto: spam = 0 spam += 42 vajcia += 42 14) Použiť lokálne premenné vo funkciách pred definovaním lokálnych premenných (v tomto prípade existuje globálna premenná s rovnakým názvom ako lokálna premenná) (čo vedie k "UnboundLocalError: local variable "foobar" referencovaná pred priradením") Je zložité použiť lokálnu premennú vo funkcii s rovnakým názvom ako globálna premenná a pravidlá použitia sú: ak je niečo definované vo funkcii, ak sa to používa iba vo funkcii, je to lokálne, a naopak. To znamená, že ho nemôžete použiť vo funkcii ako globálnu premennú pred jej definovaním. Chyba sa vyskytuje v kóde takto: someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction() 15) Pokus vytvoriť celočíselný zoznam pomocou range() (čo vedie k "TypeError: objekt "range" nepodporuje priraďovanie položiek") Niekedy chcete získať usporiadaný zoznam celých čísel, takže range() sa zdá byť dobrý spôsob, ako tento zoznam vygenerovať. Musíte si však uvedomiť, že range() vracia "range object", nie skutočnú hodnotu v zozname. Chyba sa vyskytuje v kóde takto: spam = rozsah(10) spam[4] = -1 Možno toto je to, čo chcete urobiť: spam = list(range(10)) spam[4] = -1 (Poznámka: spam = range(10) funguje v Pythone 2, pretože v Pythone 2 range() vracia zoznamovú hodnotu, ale v Pythone 3 sa generuje vyššie uvedená chyba) 16) Nice in ++ alebo -- operátor samo-inkrementu. (Výsledkom je "SyntaxError: neplatná syntax") Ak ste zvyknutí na iné jazyky ako C++, Java, PHP a podobne, možno by ste mali skúsiť použiť ++ alebo -- inkrementovať a odčítať premennú. V Pythone takýto operátor neexistuje. Chyba sa vyskytuje v kóde takto: spam = 1 spam++ Možno to je to, čo chcete urobiť: spam = 1 spam += 1 17) Zabudol som pridať parameter self k prvému argumentu metódy (čo vedie k "TypeError: myMethod() takes no arguments (1 dan)") Chyba sa vyskytuje v kóde takto: trieda Foo(): def myMethod(): print ("Hello!") a = Foo() a.myMethod()
|