A Python típusrendszerének megértése kulcsfontosságú ennek a trükkös hibának a megoldásához.

Megpróbál adatokat lekérni egy objektumról, és inkább "az objektum nem feliratkozható" hibát lát? A probléma az, hogy rossz adattípust indexel.

Tudjon meg mindent az előfizethető típusokról és a hiba elhárításáról.

Mit jelent a „feliratkozható” a Pythonban?

Az "feliratkozható" kifejezés a Pythonban olyan adattípust jelent, amely több értéket tárol, amelyekhez egyénileg is hozzáférhet. Egy adott értéket egy feliratozható adattípusból érhet el annak indexén keresztül, szögletes zárójel ([]) jelöléssel.

Ha nem indexelhető adattípusban próbál hozzáférni az elemekhez, a Python „TypeError: objektum nem feliratozható” kivételt vet fel.

A következő adattípusok feliratozhatók a Pythonban: listák, karakterláncok, sorok és szótárak.

list_example = [1, 3, 5, "Idowu"]
string_example = "Idowu Omisola"
tuple_example = (1, 3, 5, "Idowu")
dict_example = {"név": "Idowu", "Nyelv": "joruba"}

print (list_example[0]) # 1
print (string_example[3]) # w
print (tuple_example[1]) # 3
print (dict_example["név"]) # Idowu

A halmazok, egész számok, lebegőpontok és logikai értékek azonban nem érhetők el indexeléssel, így nem feliratkozhatók:

float_example = 12.45
int_example = 12367
bool_example = Igaz
set_example = {1, 3, 5, "Piton"}

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

Ezen utasítások mindegyikének futtatására tett kísérlet az „objektum nem feliratkozható” kivételt eredményez:

A Kivétel megoldása

Az "objektum nem feliratkozható" kivétel feloldása könnyebb, ha megértette az egyes adattípusok elérésére vonatkozó szabályokat. Tehát indítsa el a Python hibakeresést az indexelni kívánt objektum adattípusának ellenőrzésével.

float_example = 12.45
int_example = 12367
bool_example = Igaz
set_example = {1, 3, 5, "Piton"}

nyomtatás (típus (float_example)) #
nyomtatás (típus (int_example)) #
nyomtatás (típus (bool_example)) #
nyomtatás (típus (set_example)) #

Miután megállapította, hogy az adattípus nem feliratozható, az indexelhető típussá konvertálás megoldja a problémát. Ez akkor hasznos, ha az adatok innen származnak harmadik féltől származó API. Az olyan adattípusok, mint az integer, float és Boolean karakterláncokká konvertálása feliratozhatóvá teszi őket:

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

Még azt is megteheted manipulálja az eredményül kapott Python karakterláncokat ahogy akarod. Ha egész számmal és lebegőponttal foglalkozik, érdemes megőrizni az eredeti adattípust a kimenetben. Ehhez konvertálja a kapott értéket az eredeti adattípusra, miután karakterláncként indexelte őket:

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

# 12.0 Adattípus:
print (converted_float, f'Adattípus:{type (converted_float)}')

# 12 Adattípus:
print (converted_int, f'Adattípus:{type (converted_int)}')

Ami a készletet illeti, azt listává alakíthatja. Bár a beállított objektumot listává alakíthatja a lista (készlet) Python egysoros, ez nem őrzi meg az elem pozícióit a kapott listában. A megőrzött tételpozíciókat tartalmazó lista megtekintéséhez használja a Python lambda függvényét, például:

set_example = {1, 3, 5, "Piton"}
converted = rendezve (set_example, key=lambda x: (instance (x, str), x))

print (converted[3]) # Python

Mester Python hibakeresés

A Pythonnak sima tanulási görbéje van. De az egyszerű kivételek kiábrándíthatják, ha nem tudod, hogyan kezeld őket. A kód hibakeresésének megtanulása és a problémamegoldással való időtöltés nagyban hozzájárul a Python kódolási hibák és kivételek kijavításához.