Pochopenie typového systému Pythonu je kľúčom k vyriešeniu tejto zložitej chyby.
Pokúšate sa získať údaje z objektu a namiesto toho sa vám zobrazuje chyba „objekt nie je zapisovateľný“? Problém je v tom, že indexujete nesprávny typ údajov.
Zistite všetko o typoch s možnosťou prihlásenia a o tom, ako túto chybu vyriešiť.
Čo znamená „Subscriptable“ v Pythone?
Termín "subscriptable" v Pythone znamená dátový typ, ktorý ukladá viacero hodnôt, ku ktorým máte prístup jednotlivo. Môžete pristupovať ku konkrétnej hodnote z indexovateľného dátového typu prostredníctvom jeho indexu pomocou zápisu hranatých zátvoriek ([]).
Ak sa pokúsite získať prístup k položkám v dátovom type, ktorý nie je indexovateľný, Python vyvolá výnimku „TypeError: objekt nie je možné indexovať“.
Nasledujúce dátové typy sú v Pythone indexovateľné: zoznamy, reťazce, n-tice a slovníky.
zoznam_priklad = [1, 3, 5, "Idowu"]
string_example = "Idowu Omisola"
tuple_example = (1, 3, 5, "Idowu")
dict_example = {"názov": "Idowu", "Jazyk": "Yoruba"}
vytlačiť (príklad_zoznamu[0]) # 1
vytlačiť (príklad_reťazca[3]) # w
vytlačiť (tuple_example[1]) # 3
vytlačiť (príklad_diktátu["názov"]) #Idowu
Množiny, celé čísla, pohyblivé čísla a boolovské hodnoty sú však neprístupné prostredníctvom indexovania, takže ich nemožno indexovať:
float_example = 12.45
int_priklad = 12367
bool_example = Pravda
set_example = {1, 3, 5, "Python"}
vytlačiť (float_example[1])
vytlačiť (bool_example[2])
vytlačiť (int_example[2])
vytlačiť (set_example[2])
Pri pokuse o spustenie každého z týchto príkazov sa vypíše výnimka „objekt nie je zapisovateľný“:
Riešenie výnimky
Vyriešenie výnimky „objekt nie je zapisovateľný“ je jednoduchšie, keď pochopíte pravidlá pre prístup ku každému typu údajov. Začnite teda ladenie Pythonu skontrolovaním typu údajov objektu, ktorý sa pokúšate indexovať.
float_example = 12.45
int_priklad = 12367
bool_example = Pravda
set_example = {1, 3, 5, "Python"}
print (type (float_example)) #
vytlačiť (napíšte (int_example)) #
print (type (bool_example)) #
print (type (set_example)) #
Keď zistíte, že typ údajov nie je možné indexovať, konvertovaním na indexovateľný typ sa problém vyrieši. To je užitočné, ak sú údaje z API tretej strany. Konverzia dátových typov, ako sú integer, float a Boolean, na reťazec ich robí indexovateľnými:
print (str (float_example)[:2]) # 12
print (str (int_example)[:2]) # 12
print (str (bool_example)[:2]) # Tr
Môžete dokonca manipulovať s výslednými reťazcami Pythonu ako chceš. Ak pracujete s celým číslom a float, možno budete chcieť zachovať pôvodný typ údajov vo výstupe. Ak to chcete urobiť, skonvertujte výslednú hodnotu na ich pôvodný typ údajov po ich indexovaní ako reťazcov:
convert_float = float (str (float_example)[:2])
convert_int = int (str (int_example)[:2])# 12.0 Typ údajov:
vytlačiť (converted_float, f'Typ údajov:{type (converted_float)}')
# 12 Typ údajov:
vytlačiť (converted_int, f'Typ údajov:{type (converted_int)}')
Pokiaľ ide o sadu, môžete ju premeniť na zoznam. Hoci môžete konvertovať nastavený objekt na zoznam pomocou zoznam (množina) Python one-liner, toto nezachová pozície položiek vo výslednom zozname. Ak chcete zabezpečiť, aby ste získali zoznam so zachovanými pozíciami položiek, použite funkciu lambda Pythonu takto:
set_example = {1, 3, 5, "Python"}
konvertované = zoradené (set_example, key=lambda x: (isinstance (x, str), x))
vytlačiť (konvertované[3]) # Python
Hlavné ladenie Pythonu
Python má hladkú krivku učenia. Ale jednoduché výnimky vás môžu rozhodiť, ak neviete, ako sa s nimi vysporiadať. Naučiť sa ladiť svoj kód a venovať sa riešeniu problémov dlhou cestou k oprave chýb a výnimiek kódovania Pythonu.