|
Mācoties Python, var būt nedaudz sarežģīti saprast Python kļūdu ziņojumu nozīmi. Šeit ir saraksts ar dažām bieži sastopamām izpildlaika kļūdām, kas izraisa programmas avāriju.
1) Aizmirsu pievienot :( if, elif, else, for, while, class, def def def. Kļūda radīsies šādā kodā: ja surogātpasts == 42 print("Sveiki!") 2) Izmantojiet = == vietā (kā rezultātā rodas "SyntaxError: nederīga sintakse") = ir piešķiršanas operators un == ir vienāds ar salīdzināšanas operāciju.Kļūda rodas šādā kodā: Ja surogātpasts = 42: print("Sveiki!") 3) Nepareiza atkāpes izmantošana. (Rezultātā rodas "IndentationError:unexpected indent", "IndentationError:uncrent neatbilst nevienam ārējam indetācijas līmenim" un "IndentationError:gaidāms bloks ar atkāpi") Atcerieties, ka atkāpe tiek izmantota tikai pēc apgalvojumiem, kas beidzas ar: pēc tam atkāpes formāts ir jāatgriež iepriekšējā atkāpes formātā. Kļūda rodas šādā kodā: print("Sveiki!") drukāt ("Sveiki!") Vai: ja surogātpasts == 42: print("Sveiki!") drukāt ("Sveiki!") Vai: ja surogātpasts == 42: print("Sveiki!") 4) Aizmirstot izsaukt len() cilpas priekšrakstā (kā rezultātā "TypeError: "list" objektu nevar interpretēt kā veselu skaitli) Parasti vēlaties atkārtot saraksta vai virknes elementu, izmantojot indeksu, kas prasa izsaukt funkciju range(). Neaizmirstiet atgriezt objektīva vērtību, nevis atgriezt šo sarakstu. Kļūda rodas šādā kodā: surogātpasts = ["kaķis", "suns", "pele"] I diapazonā (surogātpasts): print(spam) 5) Mēģiniet modificēt virknes vērtību (kā rezultātā "TypeError: "str" objekts neatbalsta vienumu piešķiršanu) Virkne ir nemainīgs datu tips, un kļūda rodas šādā kodā: spam = "Man ir mājdzīvnieku kaķis." surogātpasts[13] = "r" print(spam) Un jūs patiesībā vēlaties to darīt: spam = "Man ir mājdzīvnieku kaķis." surogātpasts = surogātpasts[:13] + "r" + surogātpasts[14:] print(spam) 6) Mēģina savienot vērtības, kas nav virknes ar virknēm (kā rezultātā rodas "TypeError: Can"t konvertēt "int" objektu uz str netieši") Kļūda rodas šādā kodā: olu skaits = 12 print("Man ir " + numEggs + " olas.") Un jūs patiesībā vēlaties to darīt: olu skaits = 12 print("Man ir " + str(numEggs) + " olas.") Vai: olu skaits = 12 print("Man ir %s olas." % (numEggs)) 7) Aizmirstot ievietot pēdiņas virknes sākumā un beigās (kā rezultātā rodas "SyntaxError: EOL, skenējot virknes literālu") Kļūda rodas šādā kodā:
drukāt (Sveiki!") Vai: print("Sveiki!) Vai: myName = "Al" print("Mans vārds ir " + mansVārds + . Kā tev klājas?") 8) Mainīgo vai funkciju nosaukumu pareizrakstības kļūda (kā rezultātā rodas "NameError: nosaukums "fooba" nav definēts") Kļūda rodas šādā kodā: foobar = "Al" print("Mans vārds ir " + fooba) Vai: surogātpasts = ruond(4.2) Vai: surogātpasts = apaļš(4.2) 9) Metodes nosaukumu pareizrakstības kļūda (kā rezultātā rodas "AttributeError: "str" objektam nav atribūta "lowerr") Kļūda rodas šādā kodā: spam = "TAS IR AR MAZAJIEM BURTIEM." surogātpasts = spam.lowerr() 10) Atsauces pārsniedz saraksta maksimālo indeksu (kā rezultātā "IndexError: list index out of range") Kļūda rodas šādā kodā: surogātpasts = ["kaķis", "suns", "pele"] print(surogātpasts[6]) 11) Izmantojot vārdnīcas atslēgas vērtību, kas nepastāv (kā rezultātā rodas "KeyError: 'spam'") Kļūda rodas šādā kodā: spam = {"cat": "Zophie", "suns": "Baziliks", "pele": "Ūsas"} print("Manas mājdzīvnieka zebras nosaukums ir " + spam["zebra"]) 12) Mēģina izmantot Python atslēgvārdu kā mainīgā nosaukumu (kā rezultātā rodas "SyntaxError: nederīga sintakse") Python atslēgu nevar izmantot kā mainīgā nosaukumu, kļūda rodas šādā kodā: klase = "algebra" Python3 atslēgvārdi ir: un, kā, apgalvot, pārtraukt, klase, turpināt, def, del, elif, citādi, izņemot, Nepatiess, beidzot, par, no, globāls, ja, importēt, in, ir, lambda, Nav, nelokāls, nav, vai, nodot, paaugstināt, atgriezties, Tiesa, mēģiniet, kamēr ar, dod
13) Pievienotās vērtības operatoru izmantošana definētā jaunā mainīgajā (kā rezultātā rodas "NameError: nosaukums "foobar" nav definēts") Deklarējot mainīgos, neizmantojiet 0 vai null virknes kā sākotnējās vērtības, lai teikums spam += 1, izmantojot pašpalielinošo operatoru, būtu vienāds ar spam = spam + 1, kas nozīmē, ka surogātpastam ir jānorāda derīga sākotnējā vērtība. Kļūda rodas šādā kodā: surogātpasts = 0 Surogātpasts += 42 olas += 42 14) Izmantojiet vietējos mainīgos funkcijās pirms vietējo mainīgo definēšanas (šajā gadījumā ir globāls mainīgais ar tādu pašu nosaukumu kā vietējais mainīgais) (kā rezultātā "UnboundLocalError: vietējais mainīgais "foobar" atsaucas pirms piešķiršanas) Ir sarežģīti izmantot vietējo mainīgo funkcijā ar tādu pašu nosaukumu kā globālais mainīgais, un lietošanas noteikumi ir šādi: ja kaut kas ir definēts funkcijā, ja tas tiek izmantots tikai funkcijā, tas ir lokāls un otrādi. Tas nozīmē, ka to nevar izmantot funkcijā kā globālu mainīgo pirms tā definēšanas. Kļūda rodas šādā kodā: someVar = 42 def myFunction(): print(someVar) someVar = 100 mana funkcija() 15) Mēģina izveidot veselu skaitļu sarakstu ar range() (kā rezultātā "TypeError: "range" objekts neatbalsta vienumu piešķiršanu) Dažreiz vēlaties iegūt sakārtotu veselu skaitļu sarakstu, tāpēc range() šķiet labs veids, kā izveidot šo sarakstu. Tomēr jums jāatceras, ka range() atgriež "diapazona objektu", nevis faktisko saraksta vērtību. Kļūda rodas šādā kodā: surogātpasts = diapazons(10) surogātpasts[4] = -1 Varbūt tas ir tas, ko vēlaties darīt: surogātpasts = saraksts(diapazons(10)) surogātpasts[4] = -1 (Piezīme: spam = range(10) darbojas Python 2, jo Python 2 range() atgriež saraksta vērtību, bet Python 3 tiek ģenerēta iepriekš minētā kļūda) 16) Jauki ++ vai -- pašpieauguma operatorā. (Rezultātā rodas "SyntaxError: nederīga sintakse") Ja esat pieradis pie citām valodām, piemēram, C++, Java, PHP utt., Varat mēģināt izmantot ++ vai -- palielināt un atņemt mainīgo. Python nav šāda operatora. Kļūda rodas šādā kodā: surogātpasts = 1 surogātpasts++ Varbūt tas ir tas, ko jūs vēlaties darīt: surogātpasts = 1 Surogātpasts += 1 17) Aizmirsu pievienot self parametru metodes pirmajam argumentam (kā rezultātā "TypeError: myMethod() neņem argumentus (1 dots)") Kļūda rodas šādā kodā: klase Foo(): def myMethod(): print("Sveiki!") a = Foo() a.mana metode()
|