Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 13564|Vastaus: 1

[Viestintä] 17 yleistä Python-ajonaikaista virhettä aloittelijoille

[Kopioi linkki]
Julkaistu 5.12.2015 13.08.56 | | |

Pythonia opetellessa voi olla hieman monimutkaista ymmärtää Pythonin virheilmoitusten merkitystä. Tässä on lista yleisimmistä ajonaikaisista virheistä, jotka aiheuttavat ohjelman kaatumisen.


1) Unohdin lisätä :( if, elif, else, for, while, class, def def def def.

        Virhe tapahtuu koodissa näin:

if spam == 42
    print("Hei!")

2) Käytä = ==:n sijaan (tuloksena "SyntaxError: invalid syntax")

        = on arvostusoperaattori ja == on yhtä suuri kuin vertailuoperaatio.Virhe esiintyy koodissa näin:

jos roskaposti = 42:
    print("Hei!")

3) Virheellinen sisennyksen käyttö. (Tuloksena "IndentationError:unexpected dent", "IndentationError:undennt ei vastaa mitään ulkoista sisennystasoa" ja "IndentationError:expected an indented block")

        Muista, että sisennystä käytetään vain lauseiden jälkeen, jotka päättyvät muotoon: minkä jälkeen sisennysmuoto on palautettava aiempaan sisennysmuotoon. Virhe esiintyy koodissa näin:

print("Hei!")
    print("Terve!")
Tai:
if spam == 42:
    print("Hei!")
  print("Terve!")
Tai:
if spam == 42:
print("Hei!")

4) Unohtaminen kutsua len() for-silmukan lauseessa (mikä johtaa "TypeError: "list" object cannot be interpreted integeerinä)

Yleensä haluat iteroida listan tai merkkijonon elementin indeksin kautta, mikä vaatii range()-funktion kutsumista. Muista palauttaa lens-arvo sen sijaan, että palauttaisit tämän listan.

        Virhe esiintyy koodissa näin:

spam = ["kissa", "koira", "hiiri"]
I:lle etäisyydellä (roskaposti):
    print (roskaposti)

5) Yritä muuttaa merkkijonon arvoa (mikä johtaa "TypeError: "str" objekti ei tue alkioiden määrittelyä)

        Merkkijono on muuttumaton tietotyyppi, ja virhe esiintyy koodissa näin:

spam = "Minulla on lemmikkikissa."
spam[13] = "r"
print (roskaposti)

Ja oikeasti haluat tehdä tämän:

spam = "Minulla on lemmikkikissa."
roskaposti = roskaposti[:13] + "r" + roskaposti[14:]
print (roskaposti)

6) Yrittää yhdistää ei-merkkijonoarvoja merkkijonoihin (mikä johtaa "TypeError: Can't convert "int"-objektia str:ksi implisiittisesti)

        Virhe esiintyy koodissa näin:

numEggs = 12
print("Minulla on " + numEggs + " eggs.")

Ja oikeasti haluat tehdä tämän:

numEggs = 12
print("Minulla on " + str(numEggs) + " eggs.")
Tai:
numEggs = 12
print("Minulla on %s eggs." % (numEggs))

7) Unohtaminen laittaa lainausmerkit merkkijonon alkuun ja loppuun (mikä johtaa "SyntaxError: EOL skannauksen aikana merkkijonon literaali")

        Virhe esiintyy koodissa näin:

print (Hei!")
Tai:
print("Hei!)
Tai:
myName = "Al"
print("Nimeni on " + myName + . Mitä kuuluu?")

8) Muuttujien tai funktioiden nimien kirjoitusvirhe (mikä johtaa "NameError: name "fooba" ei ole määritelty)

        Virhe esiintyy koodissa näin:

foobar = "Al"
print("Nimeni on " + fooba)
Tai:
spam = ruond(4.2)
Tai:
spam = Kierros(4.2)

9) Metodinimien kirjoitusvirhe (mikä johtaa "AttributeError: "str"-objektilla ei ole attribuuttia "lowerr")

        Virhe esiintyy koodissa näin:

spam = "TÄMÄ ON PIENILLÄ KIRJAIMILLA."
spam = spam.lowerr()

10) Viittaukset ylittävät listan maksimiindeksin (tuloksena "IndexError: list index out of range")

        Virhe esiintyy koodissa näin:

spam = ["kissa", "koira", "hiiri"]
print(roskaposti[6])

11) Sanakirjan avainarvon käyttö, jota ei ole olemassa (mikä johtaa "KeyError: 'spam'")

        Virhe esiintyy koodissa näin:

spam = {"cat": "Zophie", "dog": "Basil", "mouse": "Whiskers"}
print("Lemmikkiseeprani nimi on" + spam["zebra"])

12) Python-avainsanan käyttäminen muuttujan nimenä (tuloksena "SyntaxError: invalid syntax")

        Python-avainta ei voi käyttää muuttujan nimenä, virhe esiintyy koodissa näin:

luokka = "algebra"

Python3:n avainsanat ovat: ja, as, assert, break, class, continue, def, del, elif, else, except, False, lopuksi, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, Totta, yritä, samalla kun antaudu


13) Lisäarvooperaattoreiden käyttö määritellyssä uudessa muuttujassa (mikä johtaa "NameError: name "foobar" ei ole määritelty)

        Älä käytä nolla- tai nollamerkkijonoja muuttujien määrittelyssä alkuarvoina, jotta lause spämmi += 1 itsekasvuoperaattorilla on yhtä suuri kuin roskaposti = roskaposti + 1, mikä tarkoittaa, että roskapostin täytyy määrittää kelvollinen alkuarvo.

        Virhe esiintyy koodissa näin:

spam = 0
spam += 42
munat += 42

14) Käytä paikallisia muuttujia funktioissa ennen paikallisten muuttujien määrittelyä (tässä tapauksessa on olemassa globaali muuttuja, jolla on sama nimi kuin paikallisella muuttujalla) (tuloksena "UnboundLocalError: local variable "foobar" viitataan ennen määritystä)

        On monimutkaista käyttää paikallista muuttujaa funktiossa, jolla on sama nimi kuin globaalilla muuttujalla, ja käyttösäännöt ovat: jos funktiossa määritellään jotain, jos sitä käytetään vain funktiossa, se on paikallinen, ja päinvastoin.

        Tämä tarkoittaa, ettet voi käyttää sitä funktiossa globaalina muuttujana ennen määrittelyä.

        Virhe esiintyy koodissa näin:

someVar = 42
def myFunction():
    print (jokuVar)
    someVar = 100
myFunction()

15) Kokonaislukulistan luominen range():lla (mikä johtaa "TypeError: "range" objekti ei tue alkioiden määrittämistä)

        Joskus haluat järjestetyn kokonaislukulistan, joten range() vaikuttaa hyvältä tavalta generoida tämä lista. Sinun täytyy kuitenkin muistaa, että range() palauttaa "range-objektin", ei varsinaista listaarvoa.

        Virhe esiintyy koodissa näin:

spam = etäisyys(10)
roskaposti[4] = -1

Ehkä tämä on se, mitä haluat tehdä:

spam = lista (range(10))
roskaposti[4] = -1
(Huomautus: spam = range(10) toimii Python 2:ssa, koska Python 2:ssa range() palauttaa listaarvon, mutta Python 3:ssa yllä oleva virhe syntyy)

16) Nice ++:ssa tai -- itseinkrementtioperaattori. (Tuloksena "SyntaxError: virheellinen syntaksi")

        Jos olet tottunut muihin kieliin, kuten C++:aan, Javaan, PHP:hen jne., saatat haluta kokeilla ++:a tai -- increment ja vähennä muuttuja. Pythonissa ei ole tällaista operaattoria.

        Virhe esiintyy koodissa näin:

spam = 1
spam++

Ehkä juuri sitä haluat tehdä:

spam = 1
spam += 1

17) Unohdin lisätä self-parametrin metodin ensimmäiseen argumenttiin (tuloksena "TypeError: myMethod() takes no arguments (1 given)")

        Virhe esiintyy koodissa näin:

luokka Foo():
    def myMethod():
        print("Hei!")
a = Foo()
a.myMethod()





Edellinen:WiFi-langaton murto-ohjelmisto + opas (vesipisara)
Seuraava:【iOS Development Series -opas julkaistu kesällä】IOS-projektin lähdekoodi
Julkaistu 5.12.2015 13.34.16 |
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com