Los índices de cadena TypeError deben ser números enteros Error de Python [resuelto]
Si intenta acceder a valores de un diccionario u objeto iterable utilizando el valor de cadena en lugar del valor entero, recibirá el siguiente mensaje de error:
TypeError: string indices must be integers
En este artículo, le mostraré ejemplos de por qué puede recibir este mensaje de error y cómo solucionarlo.
Cómo acceder a valores de una lista en Python
En este ejemplo, tenemos la siguiente lista de instrumentos musicales:
instruments = ['flute', 'trumpet', 'oboe', 'percussion', 'guitar']
Si quisiéramos acceder al tercer instrumento de la lista, usaríamos el valor de índice numérico 2:
instruments[2]
La siguiente línea de código imprimiría correctamente el resultado de oboe
:
instruments = ['flute', 'trumpet', 'oboe', 'percussion', 'guitar']
print(instruments[2])
Si intentara acceder a esa misma lista pero en su lugar usara el índice de cadena de 'oboe'
, aparecería un mensaje de error:
instruments = ['flute', 'trumpet', 'oboe', 'percussion', 'guitar']
print(instruments['oboe'])
Si encuentra este mensaje de error, verifique dos veces para asegurarse de que está utilizando el valor de índice numérico para acceder a los elementos en lugar de un valor de cadena.
Cómo acceder a valores desde un diccionario en Python
Modifiquemos nuestro ejemplo anterior para crear un diccionario de instrumentos y cantidades.
instruments = {
'flute': 2,
'trumpet': 5,
'oboe': 1,
'percussion': 4,
'guitar': 9
}
Si queremos imprimir todos los valores de nuestro diccionario instrumentos
, entonces podemos usar un bucle con el método .values()
.
for quantity in instruments.values():
print(quantity)
Si eliminamos el método .values()
e intentamos acceder a los valores utilizando índices de cadena, recibiríamos el siguiente mensaje de error:
for quantity in instruments:
print(quantity['flute'])
print(quantity['trumpet'])
print(quantity['oboe'])
print(quantity['percussion'])
print(quantity['guitar'])
Si imprime cantidad
, verá que es una cadena.
for quantity in instruments:
print(quantity)
Si intentaste escribir cantidad['flauta']
, entonces se traduce como 'flauta'['flauta']
, lo cual no tiene sentido en Python.
La forma de resolver esto sería hacer referencia a nuestro diccionario instrumentos
en lugar de usar cantidad
.
El siguiente código refactorizado produciría los resultados correctos:
instruments = {
'flute': 2,
'trumpet': 5,
'oboe': 1,
'percussion': 4,
'guitar': 9
}
print(instruments['flute'])
print(instruments['trumpet'])
print(instruments['oboe'])
print(instruments['percussion'])
print(instruments['guitar'])
Espero que hayas disfrutado de este artículo y mucha suerte en tu viaje con Python.