Korjaa 'Int' -objekti ei ole tilattavissa Pythonissa
Tässä artikkelissa tutkimme kuinka korjata 'int'-objekti, joka ei ole tilattavissa Pythonissa. Mutta ennen sitä meidän on ymmärrettävä miksi se tapahtuu ja mitä se tarkoittaa.
Mikä on 'Int' -objekti ei ole tilattavissa -virhe?
Virhe 'int'-objekti ei ole alaindeksi tapahtuu, kun yrität käyttää indeksointia tai viipalointia kokonaisluku , tietotyyppi, joka ei tue näitä toimintoja.
Kuten tiedämme kokonaisluvun in Python on tietotyyppi joka edustaa kokonaislukua. Toisin kuin luettelot tai sanakirjat, kokonaisluvut eivät sisällä elementtisarjaa, eivätkä ne siksi tue indeksointia tai viipalointia.
Jos esimerkiksi x = 42 (kokonaisluku) ja yritämme tehdä jotain kuten x[0], se on yritys päästä käsiksi x:n ensimmäiseen elementtiin ikään kuin x olisi lista tai a monikko . Koska kokonaisluvut eivät sisällä kokoelmaa alkioita, tämä toiminto ei ole kelvollinen ja saat TypeError: 'int' -objektin, jota ei voi tilata.
Esimerkki
Python 3
# Example causing 'int' object is not subscriptable error> x> => 42> # Attempting to use subscript notation on an integer> print> (x[> 0> ])> |
Lähtö:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 4, in print(number[0]) TypeError: 'int' object is not subscriptable
Miksi 'Int' -objekti ei ole tilattavissa -virhe?
'Int'-objekti ei ole tilattavissa Pythonissa virhe, joka johtuu kokonaislukuobjektien (int) erityisominaisuuksista. Tässä ovat syyt tämän virheen esiintymiseen:
- Kokonaislukujen muuttumattomuus
- Toiminnon palautustyyppi ei täsmää
- Ei iteroitavaa rakennetta
Kokonaislukujen muuttumattomuus
Kuten tiedämme, Pythonin kokonaisluvut ovat muuttumattomia, mikä tarkoittaa, että niiden arvoja ei voi muuttaa luomisen jälkeen, ja tilaus- tai indeksointitoiminnot ovat sovellettavissa muuttuviin sekvensseihin (esim. jouset ), jossa elementtejä voidaan käyttää tai muokata indeksien avulla.
Koska kokonaisluvut eivät ole muuttuvia sekvenssejä, hakasulkeiden käyttäminen tulosten merkitsemiseen Int-objektissa ei ole tilattavissa oleva virhe.
Python 3
# Example triggering 'Int' object is not subscriptable error> num> => 42> value> => num[> 0> ]> # Error: 'Int' object is not subscriptable> |
Lähtö:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 3, in value = num[0] # Error: 'Int' object is not subscriptable TypeError: 'int' object is not subscriptable
Toiminnon palautustyyppi ei täsmää
Tässä funktiossa odotetaan palauttavan listan tai monikon, kun ehto on False, kuten else-haara osoittaa.
Kuitenkin else-haarassa funktio palauttaa kokonaisluvun luettelon tai monikon sijaan, mikä johtaa 'Int' Object Is Not Subscriptable -virheeseen
Python 3
def> get_data(condition):> > '''> > This function is expected to return a list or tuple,> > but under certain conditions, it returns an integer.> > '''> > if> condition:> > return> [> 1> ,> 2> ,> 3> ]> # Returns a list> > else> :> > return> 42> # Returns an integer> > # Function call with a condition that leads to an integer being returned> result> => get_data(> False> )> > # Attempting to index the result, which is an integer in this case> first_element> => result[> 0> ]> |
Lähtö:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 15, in first_element = result[0] TypeError: 'int' object is not subscriptable
Ei iteroitavaa rakennetta
Kuten tiedämme, kokonaisluvuista puuttuu tilauksen edellyttämä iteroitava rakenne. Iteroitavissa objekteissa, kuten luetteloissa tai merkkijonoissa, on hyvin määritelty elementtisarja, jota voidaan käyttää indeksien avulla.
Hakasulkeiden käyttäminen kokonaisluvussa tarkoittaa, että sitä käsitellään ikään kuin sillä olisi iteroitavia ominaisuuksia, jolloin Int-objekti ei ole tilattavissa oleva virhe.
Python 3
# Example demonstrating misinterpretation of syntax> integer_value> => 123> value> => integer_value[> 0> ]> |
Lähtö:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 3, in value = integer_value[0] # Error: 'Int' object is not subscriptable TypeError: 'int' object is not subscriptable
Ratkaise 'Int' -objekti ei ole tilattavissa Pythonissa
- Käytä merkkijonoja tai listoja kokonaislukujen sijasta
- Tarkista muuttujatyypit
- Tarkista koodilogiikka:
Tutkikaamme niitä yksityiskohtaisesti
Käytä merkkijonoja tai listoja kokonaislukujen sijasta
Pythonissa alaindeksimerkintää voidaan soveltaa merkkijonoihin ja listoihin. Joten voimme muuntaa kokonaisluvun merkkijonoksi tai luetteloksi ennen alaindeksin merkintää.
Python 3
# Converting integer to string and using subscript notation> number> => 42> number_str> => str> (number)> print> (number_str[> 0> ])> |
Lähtö
4
Tarkista muuttujatyypit
Meidän on varmistettava, että käyttämämme muuttuja on odotettua tyyppiä, jonka haluamme sen olevan. Jos sen oletetaan olevan sarja (merkkijono tai luettelo), varmista, ettei sille ole vahingossa määritetty kokonaislukuarvoa.
Python 3
# Checking variable type before using subscript notation> number> => 42> if> isinstance> (number, (> str> ,> list> )):> > print> (number[> 0> ])> else> :> > print> (> > f> 'Error: Variable type '{type(number).__name__}' is not subscriptable.'> )> |
Lähtö
Error: Variable type 'int' is not subscriptable.
Tarkista Code Logic
Tutki koodilogiikkaasi selvittääksesi, onko alaindeksin merkintä todella tarpeellista. Jos ei, tarkista koodi välttääksesi kokonaislukujen merkitsemisen.
Python 3
# Reviewing code logic to avoid subscripting integers> number> => 42> number_str> => str> (number)> print> (number_str[> 0> ])> |
Lähtö
4
Johtopäätös
Yllä olevien tietojen perusteella voimme sanoa Tyyppivirhe : 'int' -objekti ei ole tilattavissa oleva virhe Pythonissa, mikä johtuu tyypillisesti tyyppierosta, jossa kokonaislukua käsitellään erehdyksessä tilattavana objektina, kuten luettelona tai monikkona. Tämän estämiseksi on siis erittäin tärkeää tarkistaa tietotyypit johdonmukaisesti, etenkin kun käsitellään dynaamisia tai monimutkaisia tietorakenteita.