Pythoni tüübisüsteemi mõistmine on selle keerulise vea lahendamise võtmeks.

Kas proovite objektilt andmeid hankida ja näete selle asemel viga "Objekt ei ole tellitav"? Probleem on selles, et indekseerite vale andmetüübi.

Siit saate teada kõike tellitavate tüüpide ja selle vea lahendamise kohta.

Mida tähendab Pythonis "tellitav"?

Mõiste "allindekseeritav" tähendab Pythonis andmetüüpi, mis salvestab mitu väärtust, millele pääsete juurde eraldi. Konkreetsele väärtusele pääsete juurde tellitavast andmetüübist selle indeksi kaudu, kasutades nurksulgu ([]).

Kui proovite pääseda juurde üksustele andmetüübis, mis ei ole indekseeritav, tekitab Python erandi "TypeError: objekt ei ole tellitav".

Pythonis on tellitavad järgmised andmetüübid: loendid, stringid, korteežid ja sõnastikud.

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

print (loend_example[0]) # 1
print (string_example[3]) # w
print (korter_näide[1]) # 3
print (dict_example["nimi"]) # Idowu

Kuid hulgad, täisarvud, ujukid ja Booleanid pole indekseerimise kaudu ligipääsetavad, seega ei saa neid tellida:

float_example = 12.45
int_example = 12367
bool_example = Tõsi
set_example = {1, 3, 5, "Python"}

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

Kõigi nende avalduste käivitamise katse annab välja erandi "objekt ei ole tellitav":

Erandi lahendamine

Erandi "Objekt ei ole tellitav" lahendamine on lihtsam, kui mõistate igale andmetüübile juurdepääsu reegleid. Seega alustage Pythoni silumist, kontrollides selle objekti andmetüüpi, mida proovite indekseerida.

float_example = 12.45
int_example = 12367
bool_example = Tõsi
set_example = {1, 3, 5, "Python"}

print (tüüp (float_example)) #
print (tüüp (int_example)) #
print (tüüp (bool_example)) #
print (tüüp (set_example)) #

Kui olete kindlaks teinud, et andmetüüp ei ole tellitav, lahendab probleemi selle teisendamine indekseeritavaks tüübiks. See on mugav, kui andmed pärinevad kolmanda osapoole API. Andmetüüpide (nt täisarv, ujuk ja Boolean) teisendamine stringiks muudab need tellitavaks:

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

Saate isegi manipuleerida saadud Pythoni stringidega nagu soovid. Täisarvu ja hõljuki puhul võiksite väljundis säilitada algse andmetüübi. Selleks teisendage saadud väärtus pärast nende stringidena indekseerimist algsesse andmetüüpi:

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

# 12.0 Andmetüüp:
print (converted_float, f'Andmetüüp:{tüüp (converted_float)}')

# 12 Andmetüüp:
print (converted_int, f'Andmetüüp:{tüüp (converted_int)}')

Mis puutub komplekti, siis saate selle muuta loendiks. Kuigi saate teisendada seatud objekti loendiks, kasutades nimekiri (komplekt) Pythoni üherealine, see ei säilita saadud loendis üksuste positsioone. Säilitatud üksuste positsioonidega loendi saamiseks kasutage Pythoni lambda funktsiooni järgmiselt:

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

print (converted[3]) # Python

Master Pythoni silumine

Pythonil on sujuv õppimiskõver. Kuid lihtsad erandid võivad teid häirida, kui te ei tea, kuidas nendega toime tulla. Koodi silumise õppimine ja probleemide lahendamisega aja võtmine aitab Pythoni kodeerimisvigu ja erandeid parandada.