Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 13564|Atsakyti: 1

[Komunikatas] 17 dažniausiai pasitaikančių Python vykdymo klaidų naujokams

[Kopijuoti nuorodą]
Paskelbta 2015-12-05 13:08:56 | | |

Mokantis Python gali būti šiek tiek sudėtinga suprasti Python klaidų pranešimų reikšmę. Čia pateikiamas kai kurių dažniausiai pasitaikančių vykdymo klaidų, dėl kurių programa sugenda, sąrašas.


1) Pamiršau pridėti :( pabaigoje, jei, elif, kitaip, už, kol, klasė, def def def.

        Klaida įvyks tokiame kode:

jei šlamštas == 42
    print("Sveiki!")

2) Naudokite = vietoj == (rezultatas "SyntaxError: neteisinga sintaksė")

        = yra priskyrimo operatorius ir == yra lygus palyginimo operacijai.Klaida įvyksta tokiame kode:

jei šlamštas = 42:
    print("Sveiki!")

3) Neteisingas įtraukos naudojimas. (Dėl to atsiranda "IndentationError:unexpected indent", "IndentationError:untempent neatitinka jokio išorinio intation lygio" ir "IndentationError:tikėtasi įtraukto bloko")

        Atminkite, kad įtrauka naudojama tik po sakinių, kurie baigiasi :, po kurio įtraukos formatas turi būti grąžintas į ankstesnį įtraukos formatą. Klaida įvyksta tokiame kode:

print("Sveiki!")
    spausdinti ("Sveiki!")
Arba:
jei šlamštas == 42:
    print("Sveiki!")
  spausdinti ("Sveiki!")
Arba:
jei šlamštas == 42:
print("Sveiki!")

4) Pamiršimas iškviesti len() for ciklo sakinyje (dėl to "TypeError: "list" objektas negali būti interpretuojamas kaip sveikasis skaičius)

Paprastai norite pakartoti sąrašo ar eilutės elementą per indeksą, o tam reikia iškviesti funkciją range(). Nepamirškite grąžinti len reikšmės, o ne grąžinti šį sąrašą.

        Klaida įvyksta tokiame kode:

spam = ["katė", "šuo", "pelė"]
I diapazone (šlamštas):
    spausdinti (šlamštas)

5) Pabandykite pakeisti eilutės reikšmę (dėl to "TypeError: "str" objektas nepalaiko elemento priskyrimo)

        eilutė yra nekintamas duomenų tipas, o klaida įvyksta tokiame kode:

spam = "Turiu naminę katę".
šlamštas[13] = "r"
spausdinti (šlamštas)

Ir jūs iš tikrųjų norite tai padaryti:

spam = "Turiu naminę katę".
šlamštas = šlamštas[:13] + "r" + šlamštas[14:]
spausdinti (šlamštas)

6) Bandoma sujungti ne eilutės reikšmes su eilutėmis (dėl to "TypeError: Can"t konvertuoti "int" objektą į str netiesiogiai)

        Klaida įvyksta tokiame kode:

kiaušinių skaičius = 12
print("Aš turiu " + numEggs + " kiaušiniai.")

Ir jūs iš tikrųjų norite tai padaryti:

kiaušinių skaičius = 12
print("Aš turiu " + str(numEggs) + " kiaušiniai.")
Arba:
kiaušinių skaičius = 12
print("Aš turiu %s kiaušinių." % (numEggs))

7) Pamiršta įdėti kabutes eilutės pradžioje ir pabaigoje (dėl to "SyntaxError: EOL nuskaitant eilutės literalą")

        Klaida įvyksta tokiame kode:

spausdinti (Sveiki!")
Arba:
print("Sveiki!)
Arba:
myName = "Al"
print("Mano vardas yra " + manoVardas + . Kaip sekasi?")

8) Kintamųjų ar funkcijų pavadinimų rašybos klaida (dėl to atsiranda "NameError: pavadinimas "fooba" neapibrėžtas")

        Klaida įvyksta tokiame kode:

foobar = "Al"
print("Mano vardas " + fooba)
Arba:
šlamštas = ruond(4.2)
Arba:
šlamštas = apvalus(4.2)

9) Metodų pavadinimų rašybos klaida (dėl to "AttributeError: "str" objektas neturi atributo "žemesnis")

        Klaida įvyksta tokiame kode:

spam = "TAI RAŠOMA MAŽOSIOMIS RAIDĖMIS".
šlamštas = spam.lowerr()

10) Nuorodos viršija sąrašo maksimalų indeksą (dėl to "IndexError: sąrašo indeksas nepatenka į diapazoną")

        Klaida įvyksta tokiame kode:

spam = ["katė", "šuo", "pelė"]
print(šlamštas[6])

11) Naudojant žodyno rakto reikšmę, kuri neegzistuoja (dėl to "KeyError: 'spam'")

        Klaida įvyksta tokiame kode:

spam = {"cat": "Zophie", "dog": "Bazilikas", "pelė": "Ūsai"}
print("Mano augintinio zebro vardas yra " + spam["zebra"])

12) Bandoma naudoti Python raktažodį kaip kintamojo pavadinimą (dėl to "SyntaxError: neteisinga sintaksė")

        Python raktas negali būti naudojamas kaip kintamojo pavadinimas, klaida įvyksta tokiame kode:

klasė = "algebra"

Python3 raktažodžiai yra: ir, kaip, teigti, pertrauka, klasė, tęsti, def, del, elif, else, išskyrus, Klaidinga, pagaliau, už, iš, globalus, jei, importas, į, yra, lambda, Nėra, nevietinis, ne, arba, perduoti, pakelti, grąžinti, Tiesa, pabandyk, kol, su, pasiduok


13) Pridėtinės vertės operatorių naudojimas apibrėžtame naujame kintamajame (dėl to atsiranda "NameError: pavadinimas "foobar" neapibrėžtas")

        Deklaruodami kintamuosius nenaudokite 0 arba nulinių eilučių kaip pradinių reikšmių, kad sakinys šlamštas += 1 naudojant savaime didinantį operatorių būtų lygus šlamštas = šlamštas + 1, o tai reiškia, kad šlamštas turi nurodyti galiojančią pradinę reikšmę.

        Klaida įvyksta tokiame kode:

šlamštas = 0
šlamštas += 42
kiaušiniai += 42

14) Prieš apibrėždami vietinius kintamuosius, naudokite vietinius kintamuosius funkcijose (šiuo atveju yra globalus kintamasis tokiu pačiu pavadinimu kaip ir vietinis kintamasis) (dėl to "UnboundLocalError: vietinis kintamasis "foobar" nurodytas prieš priskyrimą)

        Sudėtinga naudoti vietinį kintamąjį funkcijoje, kurios pavadinimas yra toks pat kaip globalus kintamasis, o naudojimo taisyklės yra tokios: jei kas nors apibrėžta funkcijoje, jei ji naudojama tik funkcijoje, ji yra vietinė ir atvirkščiai.

        Tai reiškia, kad prieš apibrėždami negalite jo naudoti funkcijoje kaip visuotinio kintamojo.

        Klaida įvyksta tokiame kode:

someVar = 42
def myFunction():
    spausdinti (someVar)
    someVar = 100
myFunction()

15) Bandoma sukurti sveikųjų skaičių sąrašą su range() (dėl to "TypeError: "range" objektas nepalaiko elemento priskyrimo)

        Kartais norisi gauti tvarkingą sveikųjų skaičių sąrašą, todėl range() atrodo geras būdas sugeneruoti šį sąrašą. Tačiau reikia atsiminti, kad range() grąžina "diapazono objektą", o ne tikrąją sąrašo reikšmę.

        Klaida įvyksta tokiame kode:

šlamštas = diapazonas(10)
šlamštas[4] = -1

Galbūt štai ką norite padaryti:

šlamštas = sąrašas(diapazonas(10))
šlamštas[4] = -1
(Pastaba: spam = range(10) veikia Python 2, nes Python 2 range() grąžina sąrašo reikšmę, bet Python 3 sugeneruojama aukščiau pateikta klaida)

16) Gražus ++ arba -- savaiminio didinimo operatorius. (Rezultatas "SyntaxError: neleistina sintaksė")

        Jei esate įpratę prie kitų kalbų, tokių kaip C++, Java, PHP ir kt., galbūt norėsite pabandyti naudoti ++ arba -- padidinti ir atimti kintamąjį. Python tokio operatoriaus nėra.

        Klaida įvyksta tokiame kode:

šlamštas = 1
šlamštas++

Galbūt tai, ką norite padaryti:

šlamštas = 1
šlamštas += 1

17) Pamiršau pridėti savęs parametrą prie pirmojo metodo argumento (dėl to "TypeError: myMethod() nepriima argumentų (1 duota)")

        Klaida įvyksta tokiame kode:

klasė Foo():
    def myMethod():
        print("Sveiki!")
a = Foo()
a.myMetodas()





Ankstesnis:"WiFi" belaidžio krekingo programinė įranga + pamoka (vandens lašelis)
Kitą:【Vasarą išleista "iOS" kūrimo serijos pamoka】 IOS projekto šaltinio kodas
Paskelbta 2015-12-05 13:34:16 |
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com