not enough values to unpack (expected 3, got 2)

Python Erreur courante

Explication

L'erreur `ValueError: not enough values to unpack (expected 3, got 2)` survient lors d'un **dépaquetage** (affectation multiple) où le nombre de variables à gauche ne correspond pas au nombre d'éléments à droite. Ici, vous attendez 3 valeurs mais la séquence n'en contient que 2. ```python a, b, c = [1, 2] # 3 variables, mais seulement 2 valeurs # ValueError: not enough values to unpack (expected 3, got 2) ```

Causes courantes

- **`split()` renvoie moins de morceaux** que prévu (séparateur absent, ligne incomplète). - **Ligne CSV** avec une colonne manquante. - **Fonction qui renvoie moins de valeurs** que vous n'en dépaquetez. - **Itération sur un dictionnaire** sans `.items()` (vous obtenez les clés seules).

1. Vérifiez le nombre réel d'éléments

parts = ligne.split(",")
if len(parts) == 3:
    a, b, c = parts
else:
    print("Ligne mal formée :", ligne)

2. Utilisez * pour absorber le reste

L'étoile capture un nombre variable d'éléments :

a, b, *reste = [1, 2]   # a=1, b=2, reste=[]
premier, *milieu, dernier = [1, 2, 3, 4]

3. Fournissez des valeurs par défaut

parts = (ligne.split(",") + [None, None, None])[:3]
a, b, c = parts

4. Pour un dictionnaire, dépaquetez avec .items()

for cle, valeur in mon_dict.items():   # ✅ et non `for cle, valeur in mon_dict`
    ...

Comment prevenir cette erreur

- **Validez la forme des données** (nombre de colonnes) avant de dépaqueter. - **Préférez `*reste`** quand la longueur peut varier. - Pour le CSV, utilisez le module `csv` qui gère mieux les colonnes que `split`. - Référence : [docs.python.org — Dépaquetage](https://docs.python.org/fr/3/tutorial/datastructures.html#tuples-and-sequences).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Quelle différence avec « too many values to unpack » ?
« not enough » = il y a **moins** d'éléments que de variables ; « too many » = il y en a **plus**. Dans les deux cas, alignez le nombre de variables sur les données, ou utilisez `*reste` pour absorber le surplus.
Comment dépaqueter une ligne dont le nombre de champs varie ?
Utilisez l'étoile : `premier, *autres = ligne.split(",")`. `premier` reçoit le premier champ, `autres` reçoit la liste (éventuellement vide) du reste.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.