Pythonin tyyppijärjestelmän ymmärtäminen on avainasemassa tämän hankalan virheen ratkaisemisessa.

Yritätkö hakea tietoja objektista ja näet sen sijaan "objekti ei voi tilata" -virheen? Ongelmana on, että indeksoit väärän tietotyypin.

Ota selvää tilaustyypeistä ja tämän virheen ratkaisemisesta.

Mitä "Subscriptable" tarkoittaa Pythonissa?

Termi "tilattava" tarkoittaa Pythonissa tietotyyppiä, joka tallentaa useita arvoja, joita voit käyttää yksittäin. Voit käyttää tiettyä arvoa tilattavasta tietotyypistä sen indeksin kautta käyttämällä hakasulkeiden ([]) merkintää.

Jos yrität käyttää kohteita tietotyypissä, joka ei ole indeksoitavissa, Python herättää "TypeError: objekti ei ole tilattavissa" -poikkeuksen.

Seuraavat tietotyypit ovat tilattavissa Pythonissa: luettelot, merkkijonot, monikot ja sanakirjat.

list_example = [1, 3, 5, "Idowu"]
merkkijono_esimerkki = "Idowu Omisola"
tuple_example = (1, 3, 5, "Idowu")
dict_example = {"nimi": "Idowu", "Kieli": "joruba"}

tulosta (list_example[0]) # 1
tulosta (merkkijono_esimerkki[3]) # w
tulosta (tuple_example[1]) # 3
print (dict_example["nimi"]) #Idowu

Joukkoja, kokonaislukuja, kellukkeita ja Booleaneja ei kuitenkaan voi käyttää indeksoinnin kautta, joten niitä ei voi tilata:

float_example = 12.45
int_esimerkki = 12367
bool_example = Totta
set_example = {1, 3, 5, "Python"}

print (float_example[1])
tulosta (bool_example[2])
tulosta (int_example[2])
tulosta (set_example[2])

Kun yritetään suorittaa jokainen näistä käskyistä, tulos on "objekti ei voi tilata" -poikkeuksen:

Poikkeuksen ratkaiseminen

"Objektia ei voi tilata" -poikkeuksen ratkaiseminen on helpompaa, kun ymmärrät kunkin tietotyypin käyttösäännöt. Joten aloita Python-virheenkorjaus tarkistamalla sen objektin tietotyyppi, jota yrität indeksoida.

float_example = 12.45
int_esimerkki = 12367
bool_example = Totta
set_example = {1, 3, 5, "Python"}

tulosta (tyyppi (float_example)) #
tulosta (tyyppi (int_example)) #
tulosta (tyyppi (bool_example)) #
tulosta (tyyppi (set_example)) #

Kun olet todennut, että tietotyyppi ei ole tilattavissa, sen muuntaminen indeksoitavaksi tyypiksi ratkaisee ongelman. Tämä on kätevää, jos tiedot ovat peräisin kolmannen osapuolen API. Tietotyyppien, kuten kokonaisluvun, floatin ja Boolen muuntaminen merkkijonoksi tekee niistä tilattavissa:

tulosta (str (float_example)[:2]) # 12
tulosta (str (int_example)[:2]) # 12
tulosta (str (bool_example)[:2]) # Tr

Voit jopa manipuloida tuloksena olevia Python-merkkijonoja kuten haluat. Jos käsittelet kokonaislukua ja kellua, saatat haluta säilyttää alkuperäisen tietotyypin tulosteessa. Voit tehdä tämän muuntamalla tuloksena saadun arvon alkuperäiseksi tietotyypiksi sen jälkeen, kun olet indeksoinut ne merkkijonoina:

converted_float = float (str (float_example)[:2])
converted_int = int (str (int_example)[:2])

# 12.0 Tietotyyppi:
tulosta (converted_float, f'Tietotyyppi:{type (converted_float)}')

# 12 Tietotyyppi:
tulosta (converted_int, f'Tietotyyppi:{type (converted_int)}')

Mitä tulee joukkoon, voit muuttaa sen luetteloksi. Vaikka voit muuntaa asetettu objektin luetteloksi käyttämällä lista (joukko) Python yksilinjainen, tämä ei säilytä nimikkeiden sijaintia tuloksena olevassa luettelossa. Varmistaaksesi, että saat luettelon säilytetyistä nimikkeistä, käytä Pythonin lambda-funktiota seuraavasti:

set_example = {1, 3, 5, "Python"}
muunnettu = lajiteltu (set_example, key=lambda x: (instance (x, str), x))

tulosta (muunnettu[3]) # Python

Master Python-virheenkorjaus

Pythonilla on sujuva oppimiskäyrä. Mutta yksinkertaiset poikkeukset voivat saada sinut syrjään, jos et tiedä, miten niihin puututaan. Koodin virheenkorjauksen oppiminen ja ongelmanratkaisun käyttäminen auttaa ratkaisemaan Python-koodausvirheet ja -poikkeukset.