Razumevanje Pythonovega sistema tipov je ključno za rešitev te zapletene napake.

Poskušate pridobiti podatke iz predmeta in namesto tega vidite napako "objekta ni mogoče vpisati"? Težava je v tem, da indeksirate napačen tip podatkov.

Izvedite vse o naročniških vrstah in o tem, kako odpraviti to napako.

Kaj pomeni "naročniško" v Pythonu?

Izraz "subscriptable" v Pythonu pomeni vrsto podatkov, ki hrani več vrednosti, do katerih lahko dostopate posamično. Do določene vrednosti lahko dostopate iz podatkovnega tipa, ki ga je mogoče vpisati, prek njegovega indeksa z uporabo zapisa v oglatih oklepajih ([]).

Če poskušate dostopati do postavk v podatkovnem tipu, ki ga ni mogoče indeksirati, Python sproži izjemo »TypeError: object is not subscriptable«.

V Pythonu je mogoče vpisati naslednje tipe podatkov: sezname, nize, tuple in slovarje.

primer_seznama = [1, 3, 5, "Idowu"]
primer_niza = "Idowu Omisola"
tuple_example = (1, 3, 5, "Idowu")
dict_example = {"ime": "Idowu", "Jezik": "joruba"}

natisni (seznam_primer[

instagram viewer
0]) # 1
natisni (niz_primer[3]) # w
natisni (tuple_example[1]) # 3
natisni (dict_example["ime"]) # Idowu

Vendar pa nizi, cela števila, plavajoča števila in logične vrednosti niso dostopni prek indeksiranja, zato jih ni mogoče vpisati:

float_example = 12.45
int_primer = 12367
bool_example = Prav
set_example = {1, 3, 5, "Python"}

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

Poskus zagona vsakega od teh stavkov povzroči izjemo "objekta ni mogoče vpisati":

Reševanje izjeme

Reševanje izjeme "objekta ni mogoče vpisati" je lažje, ko razumete pravila za dostop do vsake vrste podatkov. Zato začnite odpravljati napake v Pythonu s preverjanjem vrste podatkov predmeta, ki ga želite indeksirati.

float_example = 12.45
int_primer = 12367
bool_example = Prav
set_example = {1, 3, 5, "Python"}

natisni (tip (float_example)) #
natisni (tip (int_example)) #
natisni (tip (bool_example)) #
natisni (tip (set_example)) #

Ko ugotovite, da podatkovnega tipa ni mogoče vpisati, težavo odpravite s pretvorbo v tip, ki ga je mogoče indeksirati. To je priročno, če so podatki iz API tretje osebe. Pretvorba podatkovnih vrst, kot so celo število, plavajoča in logična vrednost, v niz omogoča, da jih je mogoče vpisati:

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

Lahko celo manipulirati z nastalimi nizi Python kakor hočeš. Če imate opravka s celim številom in številom s plavajočim, boste morda želeli obdržati izvirni podatkovni tip v izhodu. Če želite to narediti, pretvorite dobljeno vrednost v izvirni podatkovni tip, potem ko jih indeksirate kot nize:

pretvorjeno_float = float (str (float_example)[:2])
pretvorjeno_int = int (str (int_example)[:2])

# 12.0 Tip podatkov:
natisni (pretvorjeno_float, f'Vrsta podatkov:{type (converted_float)}')

# 12 Tip podatkov:
natisni (pretvorjeno_int, f'Vrsta podatkov:{type (converted_int)}')

Kar zadeva niz, ga lahko spremenite v seznam. Čeprav lahko predmet niza pretvorite v seznam z uporabo seznam (set) Enovrstični Python, to ne ohrani položajev elementov na nastalem seznamu. Če želite zagotoviti, da dobite seznam z ohranjenimi položaji elementov, uporabite Pythonovo funkcijo lambda tako:

set_example = {1, 3, 5, "Python"}
pretvorjeno = razvrščeno (set_example, key=lambda x: (jeinstanca (x, str), x))

natisni (pretvorjeno [3]) # Python

Obvladajte odpravljanje napak v Pythonu

Python ima gladko krivuljo učenja. Toda enostavne izjeme vas lahko vržejo v vodo, če ne veste, kako se jih lotiti. Če se naučite odpravljati napake v kodi in si vzamete čas za reševanje težav, boste veliko pripomogli k odpravljanju napak in izjem pri kodiranju Pythona.