Comprender el sistema de tipos de Python es clave para resolver este error complicado.
¿Intenta recuperar datos de un objeto y ve un error de "objeto no es subscriptible" en su lugar? El problema es que está indexando el tipo de datos incorrecto.
Descubra todo sobre los tipos subíndices y cómo resolver este error.
¿Qué significa "Subscriptable" en Python?
El término "suscriptible" en Python significa un tipo de datos que almacena múltiples valores a los que puede acceder individualmente. Puede acceder a un valor específico de un tipo de datos subíndice a través de su índice, utilizando la notación de corchetes ([]).
Si intenta acceder a los elementos en un tipo de datos que no es indexable, Python genera una excepción "TypeError: object is not subscriptable".
Los siguientes tipos de datos son subíndices en Python: listas, cadenas, tuplas y diccionarios.
lista_ejemplo = [1, 3, 5, "Idowu"]
cadena_ejemplo = "Idowu Omisola"
tupla_ejemplo = (1, 3, 5, "Idowu")
ejemplo_dict = {"nombre": "Idowu", "Idioma": "yoruba"}
imprimir (lista_ejemplo[0]) # 1
imprimir (cadena_ejemplo[3]) # w
imprimir (tuple_ejemplo[1]) # 3
imprimir (ejemplo_dict["nombre"]) #idowu
Sin embargo, los conjuntos, enteros, flotantes y booleanos son inaccesibles a través de la indexación, por lo que no se pueden suscribir:
float_example = 12.45
int_ejemplo = 12367
bool_ejemplo = Verdadero
conjunto_ejemplo = {1, 3, 5, "Pitón"}
imprimir (ejemplo_flotante[1])
imprimir (bool_ejemplo[2])
imprimir (int_ejemplo[2])
imprimir (conjunto_ejemplo[2])
Al intentar ejecutar cada una de estas declaraciones, se genera la excepción "el objeto no se puede subíndice":
Resolución de la excepción
Resolver la excepción "el objeto no se puede suscribir" es más fácil una vez que comprenda las reglas para acceder a cada tipo de datos. Así que comience la depuración de Python comprobando el tipo de datos del objeto que está tratando de indexar.
float_example = 12.45
int_ejemplo = 12367
bool_ejemplo = Verdadero
conjunto_ejemplo = {1, 3, 5, "Pitón"}
imprimir (escribir (float_example)) #
imprimir (escribir (int_example)) #
imprimir (escribir (bool_example)) #
imprimir (escribir (set_example)) #
Una vez que determina que el tipo de datos no es subíndice, el problema se resuelve convirtiéndolo en un tipo indexable. Esto es útil si los datos son de una API de terceros. Convertir tipos de datos como enteros, flotantes y booleanos en una cadena los convierte en subíndices:
imprimir (str (ejemplo_flotante)[:2]) # 12
imprimir (str (int_example)[:2]) # 12
imprimir (str (bool_ejemplo)[:2]) # Tr
Tu puedes incluso manipular las cadenas de Python resultantes como quieras Si se trata de números enteros y flotantes, es posible que desee conservar el tipo de datos original en la salida. Para hacer esto, convierta el valor resultante en su tipo de datos original después de indexarlos como cadenas:
convert_float = float (str (float_example)[:2])
convert_int = int (str (int_example)[:2])# 12.0 Tipo de datos:
imprimir (converted_float, f'Tipo de datos:{tipo (converted_float)}')
#12 Tipo de dato:
imprimir (convertido_int, f'Tipo de datos:{tipo (converted_int)}')
En cuanto a un conjunto, puede transformarlo en una lista. Aunque puede convertir un objeto establecido en una lista usando el lista (conjunto) Python one-liner, esto no conserva las posiciones de los elementos en la lista resultante. Para asegurarse de obtener una lista con posiciones de elementos preservadas, use la función lambda de Python de la siguiente manera:
conjunto_ejemplo = {1, 3, 5, "Pitón"}
convertido = ordenado (set_example, key=lambda x: (es una instancia (x, str), x))
imprimir (convertido[3]) # pitón
Depuración maestra de Python
Python tiene una curva de aprendizaje suave. Pero las excepciones simples pueden despistarlo si no sabe cómo abordarlas. Aprender a depurar su código y tomarse su tiempo para resolver problemas contribuye en gran medida a corregir errores y excepciones de codificación de Python.