ValueError: Demasiados valores para desempaquetar

Zeeshan Afridi 21 junio 2023
  1. ¿Qué es ValueError en Python?
  2. Solucione el ValueError: demasiados valores para desempaquetar en Python
  3. Manejar la excepción ValueError: demasiados valores para desempaquetar con Try-Catch en Python
ValueError: Demasiados valores para desempaquetar

El ValueError: demasiados valores para desempaquetar a veces ocurre cuando las variables a la izquierda del operador de asignación = no son iguales a los valores a la derecha del operador de asignación =.

Comúnmente sucede cuando intenta tomar más de una entrada del usuario en una sola declaración de entrada o asigna variables desiguales a algunos valores.

¿Qué es ValueError en Python?

Un ValueError es una excepción común en Python que ocurre cuando su número de valores no cumple con el número de variables, ya sea tomando entrada, asignación directa o a través de una matriz. Para entender el ValueError, tomemos un ejemplo.

Ejemplo de código:

# take two string values as input separated by a comma
x, y = input("Enter x and y: ").split(",")

Producción :

Eneter x and y: 3,2,1
ValueError: too many values to unpack (expected 2)

Como puede ver en el código anterior, estamos tomando dos entradas, x e y; la instrucción input espera dos valores separados por la coma ,.

Pero en este caso, hemos proporcionado tres valores como entrada para demostrar el tema, que ha arrojado el ValueError: demasiados valores para desempaquetar.

Otro caso del ValueError: demasiados valores para desempaquetar podría ser la asignación directa de valores a las variables. Entendámoslo a través de un ejemplo.

a, b = 2, 3, 5  # ValueError: too many values to unpack (expected 2)
a, b, c = 2, 3  # ValueError: not enough values to unpack (expected 3, got 2)
a, b = [3, 2, 1]  # ValueError: too many values to unpack (expected 2)

Los anteriores son algunos otros casos que arrojan el ValueError.

Solucione el ValueError: demasiados valores para desempaquetar en Python

Para evitar el ValueError, debe proporcionar el número exacto de valores esperado por la instrucción input, una lista o una matriz. Las mejores prácticas son utilizar bloques try-catch y mostrar mensajes a los usuarios para guiarlos.

Entendamos cómo podemos solucionar el ValueError: demasiados valores para desempaquetar.

# User message --> Enter the two numbers to add  ::
a, b = input("Enter two numbers to add  ::  ").split(",")

# type casting a and b
a = int(a)
b = int(b)

print("The sum of the two numbers is     :: ", a + b)

Producción :

Enter two numbers to add  ::  22,23
The sum of the two numbers is     ::  45

Manejar la excepción ValueError: demasiados valores para desempaquetar con Try-Catch en Python

Casi todos los demás lenguajes de programación tienen el mecanismo try-catch para el manejo de excepciones. El manejo de excepciones es un mecanismo proactivo que controla los errores o las excepciones antes de bloquear el programa y ayuda a mostrar la naturaleza y la causa del error.

Además, puede mostrar sus mensajes para interpretar las excepciones.

Entendámoslo a través de un ejemplo.

try:
    # User message --> Enter the two numbers to add  ::
    x, y = input("Enter  two numbers to add  ::  ").split(",")

    # type casting x and y
    x = int(x)
    y = int(y)
    print("The sum of the two numbers is      :: ", x + y)

except ValueError as v:
    print(
        "Oops! Looks like you have enter an invalid number of input"
        + "\nPlease enter two numbers to add"
    )
    print("ValueError:", v)

print("\nWow! The program is not crashed.")

Producción :

Enter  two numbers to add  ::  1,2,3
Oops! Looks like you have enter an invalid number of input
Please enter two numbers to add
ValueError: too many values to unpack (expected 2)

Wow! The program is not crashed.

Como puede ver, el programa anterior falla y provoca el ValueError, pero tenga en cuenta que el programa aún no se ha bloqueado.

Puede ver que el código en el bloque try ha causado la excepción ValueError, y en lugar de bloquearlo en la línea, el bloque try ha pasado el error al bloque except, que interpreta la excepción y muestra un mensaje personalizado para el usuario. El mensaje personalizado nos ayuda a interpretar el error fácilmente.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Artículo relacionado - Python Error