Resuelva el TypeError: el objeto Nonetype no se puede suscribir en Python

Shikha Chaudhary 21 junio 2023
  1. el TypeError: el objeto 'NoneType' no es subíndice en Python
  2. Resuelva el TypeError: el objeto 'NoneType' no es subscriptible en Python
  3. Conclusión
Resuelva el TypeError: el objeto Nonetype no se puede suscribir en Python

Python tiene varios tipos de datos de secuencia como listas, tuplas y diccionarios que admiten la indexación. Dado que el término subíndice se refiere al valor utilizado durante la indexación, estos objetos también se conocen como objetos subíndice.

En Python, la indexación incorrecta de dichos objetos subíndices a menudo da como resultado TypeError: el objeto 'NoneType' no es subíndice. En este artículo, discutiremos este error y las posibles soluciones para solucionarlo.

¿Listo? ¡Vamos a empezar!

el TypeError: el objeto 'NoneType' no es subíndice en Python

Antes de ver por qué ocurre el TypeError: 'NoneType' object is not subscriptable y cómo solucionarlo, primero veamos algunos conceptos básicos.

Introducción a los objetos NoneType y Subscriptable en Python

En Python, un objeto NoneType es un objeto que no tiene valor. En otras palabras, es un objeto que no devuelve nada.

El valor Ninguno a menudo lo devuelven las funciones que buscan algo pero no lo encuentran. A continuación se muestra un ejemplo en el que una función devuelve el valor Ninguno.

def none_demo():
    for i in [1, 2, 3, 4, 5]:
        if i == 10:
            return yes


ans = none_demo()
print(ans)

Producción :

None

Hablando de objetos subíndices, como su nombre lo dice, estos son objetos de Python que pueden subíndices o indexados. En palabras más simples, los objetos subíndices son aquellos objetos a los que se puede acceder o atravesar con la ayuda de valores de índice como 0, 1, etc.

Listas, tuplas y diccionarios son ejemplos de tales objetos. A continuación hay un código que muestra cómo puede recorrer una lista con la ayuda de la indexación.

cakes = ["Mango", "Vanilla", "Chocolate"]
for i in range(0, 3):
    print(cakes[i])

Producción :

Mango
Vanilla
Chocolate

Ahora que conoce bien los conceptos básicos, ¡así que avancemos!

Resuelva el TypeError: el objeto 'NoneType' no es subscriptible en Python

En Python, hay algunas funciones integradas como reverse(), sort() y append() que podemos usar en objetos suscriptibles. Pero si asignamos los resultados de estas funciones integradas a una variable, da como resultado el TypeError: 'NoneType' object is not subscriptable.

Mira el ejemplo que se da a continuación. Aquí, usamos la función reverse() en la lista llamada desserts y almacenamos la resultante en la variable ans.

Luego, imprimimos el valor de la variable ans, que resulta ser Ninguno como se ve en la salida. Sin embargo, la última declaración conduce al TypeError: el objeto 'NoneType' no es subíndice.

¿Alguien sabe por qué sucedió esto?

desserts = ["cakes", "pie", "cookies"]
ans = desserts.reverse()
print("The variable ans contains: ", ans)
print(ans[0])

Producción :

The variable ans contains:  None
Traceback (most recent call last):
  File "<string>", line 4, in <module>
TypeError: 'NoneType' object is not subscriptable

Esto sucedió porque, en la última línea, estamos subíndice la variable ans. Sabemos que la variable ans contiene el valor Ninguno, que ni siquiera es un tipo de datos de secuencia; por lo tanto, no se puede acceder mediante la indexación.

Lo importante de entender aquí es que aunque estamos asignando la lista invertida a la variable ans, eso no hace que esa variable sea ans de un tipo de lista. Por lo tanto, no podemos acceder a la variable ans utilizando la indexación, pensando en ella como una lista.

En realidad, la variable ans es un objeto NoneType, y Python no admite la indexación de dichos objetos. Por lo tanto, uno no debe tratar de indexar un objeto no subscriptible, o conducirá al TypeError: 'NoneType' object is not subscriptable.

Para rectificar este problema del código anterior, siga el enfoque a continuación.

Esta vez no asignamos el resultado de la operación reverse() a ninguna variable. De esa manera, la función reemplazará automáticamente la lista actual con la lista invertida sin ningún espacio adicional.

Posteriormente, podemos imprimir la lista como queramos. Aquí, primero imprimimos la lista invertida completa y luego accedemos al primer elemento usando el subíndice 0.

Como puede ver, el código funciona bien y da el resultado deseado.

desserts = ["cakes", "pie", "cookies"]
desserts.reverse()
print(desserts)
print(desserts[0])

Producción :

['cookies', 'pie', 'cakes']
cookies

La misma regla de no asignar el resultado a una variable y luego indexarlo se aplica a otras funciones como sort() y append() también. A continuación se muestra un ejemplo que utiliza la función sort() y se encuentra con el TypeError: 'NoneType' object is not subscriptable.

desserts = ["cakes", "pie", "cookies"]
ans = desserts.sort()
print("The value of the variable is: ", ans)
print(ans[1])

Producción :

The value of the variable is:  None
Traceback (most recent call last):
  File "<string>", line 4, in <module>
TypeError: 'NoneType' object is not subscriptable

Una vez más, esto sucede por la misma razón. Tenemos que abandonar el uso de otra variable para almacenar la lista ordenada para deshacernos de este error.

Esto se hace a continuación.

desserts = ["cakes", "pie", "cookies"]
desserts.sort()
print(desserts)
print(desserts[1])

Producción :

['cakes', 'cookies', 'pie']
cookies

Puede ver que, esta vez, el método sort() reemplaza la lista con la nueva lista ordenada sin necesidad de espacio adicional. Más tarde, podemos acceder a los elementos individuales de la lista ordenada utilizando la indexación sin preocuparnos por este error.

Y aquí hay algo interesante. ¿Listo para escucharlo?

En el caso de la función sort(), si aún desea usar una variable separada para almacenar la lista ordenada, puede usar la función sorted(). Esto se hace a continuación.

desserts = ["cakes", "pie", "cookies"]
ans = sorted(desserts)
print(ans)
print(ans[0])

Producción :

['cakes', 'cookies', 'pie']
cakes

Puede ver que esto no conduce a ningún error porque la función sorted() devuelve una lista ordenada, a diferencia del método sort() que ordena la lista en su lugar.

Pero desafortunadamente, no tenemos tales funciones alternativas para los métodos reverse() y append().

Esto es todo por este artículo. Consulte esta documentación para obtener más información sobre este tema.

Conclusión

Este artículo nos enseñó sobre el TypeError 'NoneType' object not subscriptable en Python. Vimos cómo asignar los valores de realizar operaciones como reverse() y append() en tipos de datos de secuencia a variables conduce a este error.

También vimos cómo podíamos arreglar este error usando la función sorted() en lugar de la función sort() para evitar este error en primer lugar.

Artículo relacionado - Python Error