HOWTO · Python

IndexError: índice de tupla fuera de rango en Python

Demostraremos cómo resolver el error de índice de tupla fuera de rango en Python.

En esta página

Un error de índice en una tupla significa que Python intentó obtener un elemento en una posición que la tupla no contiene. En esta guía se explica cómo funcionan los índices, cómo seleccionar el último elemento y cómo manejar un índice que depende de datos cambiantes.

Qué significa IndexError: tuple index out of range

Una tupla es una colección ordenada e inmutable. Python asigna índices a sus elementos empezando por 0, así que una tupla con n elementos tiene índices positivos válidos desde 0 hasta n - 1. Por ejemplo, el último elemento de una tupla de siete elementos está en el índice 6, no en el 7. Intentar leer el índice 7 provoca IndexError: tuple index out of range.

Los índices negativos cuentan desde el final: -1 selecciona el último elemento y -2, el anterior. Una tupla vacía no tiene elementos, por lo que no se puede seleccionar ninguno mediante índices positivos ni negativos.

Causas habituales del error

La causa más frecuente es un cálculo con un error de uno, a menudo al usar la longitud de la tupla como índice. Si items tiene cuatro elementos, len(items) es 4, pero su último índice positivo es 3. Un bucle que usa range(len(items)) es seguro para el acceso habitual porque su último valor es uno menos que la longitud; sumarle uno manualmente puede hacer que el índice se pase del límite.

El índice también puede proceder de una entrada, de un cálculo o de datos que cambian entre pasos. Comprueba el valor que se usa realmente en el acceso que falla y la longitud actual de la tupla. Que el valor tenga otro tipo no explica por sí solo este mensaje específico de tuplas; si el rastreo de errores o el nombre de la variable puede inducir a confusión, confirma qué objeto se está indexando.

Cómo acceder de forma segura al último elemento de una tupla

Si una tupla contiene al menos un elemento, items[-1] es la forma concisa de obtener el último. Si ya necesitas la longitud para otra lógica, items[len(items) - 1] selecciona la misma posición. Ambas formas requieren que la tupla tenga al menos un elemento.

Ejecuta este ejemplo. La salida que muestra es blue.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

items = ("red", "green", "blue")
print(items[-1])

Salida: blue.

blue

Si la tupla podría estar vacía, compruébalo antes de acceder a un elemento. Si no hay elementos, el ejemplo muestra No items.

items = ()
if items:
    print(items[-1])
else:
    print("No items")

Salida: No items.

No items

Así se contempla explícitamente el caso sin elementos, en vez de intentar un acceso que no puede tener éxito.

Cómo manejar índices que podrían estar fuera de rango

Si se espera que un índice esté dentro de los límites de la tupla, valídalo antes de acceder a ella. Así también resulta sencillo elegir un valor predeterminado o indicar que la posición solicitada no está disponible:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

items = ("red", "green", "blue")
index = 4
if 0 <= index < len(items):
    print(items[index])
else:
    print("Index is outside the tuple")

Salida: Index is outside the tuple.

Index is outside the tuple

Una comprobación de límites es útil cuando el programa debe responder de una manera concreta si una posición no está disponible. Captura IndexError cuando el acceso forme parte de una operación en la que el índice pueda variar legítimamente y resulte más claro gestionar el fallo que comprobarlo de antemano. Mantén el bloque try centrado en ese acceso; una gestión demasiado amplia de excepciones puede ocultar errores de programación ajenos. En una tupla vacía no hay ningún índice que supere la comprobación de índice positivo.

Cómo comprobar el valor y el índice antes de indexar

Si no tienes certeza sobre el tipo del objeto, primero confirma que sea una tupla con isinstance(value, tuple). Esta comprobación verifica el tipo del objeto, pero no garantiza que exista un índice concreto. Después, comprueba el índice con len(value) o gestiona IndexError en el acceso. Si el objeto es otro tipo de secuencia, averigua cuál es el comportamiento esperado de ese tipo en vez de suponer que causó este mensaje específico de tuplas.

En resumen, IndexError señala un intento de acceder a una posición que no existe en la tupla. Corrige los cálculos con errores de uno, usa items[-1] para obtener el último elemento de una tupla no vacía y, cuando el índice dependa de datos, elige entre una comprobación explícita de límites y una gestión de excepciones acotada.