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[ 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.