Resuelva el TypeError: el objeto Nonetype no se puede suscribir en Python
-
el
TypeError: el objeto 'NoneType' no es subíndice
en Python -
Resuelva el
TypeError: el objeto 'NoneType' no es subscriptible
en Python - Conclusión
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
- Administrar fallas de segmentación en Python
- Archivo <Stdin>, Línea 1, en <Módulo> Error en Python
- Arreglar AttributeError: el objeto 'generador' no tiene atributo 'siguiente' en Python
- Arreglar el comando cl.exe falló: no existe tal archivo o directorio en Windows
- Arreglar NameError: la variable no está definida en Python
- Arreglar Socket.Gaierror: [Errno 8] Nodename ni Servname proporcionado, o desconocido en Python