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 contacterQuestions 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.