Búsqueda de sitios web

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.

Artículos relacionados