Erreurs Python
Erreurs génériques
| Erreur | Description | Quoi corriger |
|---|---|---|
SyntaxError: invalid syntax |
Erreur de syntaxe dans le code (parenthèse manquante, deux points oubliés, etc.) | Vérifier les parenthèses, crochets, guillemets appariés. Ajouter : après if, for, def, class |
IndentationError: expected an indented block |
Bloc de code non indenté après une instruction qui l'exige | Indenter le code après if, for, while, def, class avec 4 espaces ou une tabulation |
NameError: name 'x' is not defined |
Variable ou fonction utilisée sans avoir été définie | Définir la variable avant usage, vérifier l'orthographe, importer le module nécessaire |
TypeError: unsupported operand type(s) |
Opération entre types incompatibles (ex: "texte" + 5) | Convertir au bon type avec int(), str(), float() |
AttributeError: 'type' object has no attribute 'x' |
Tentative d'accès à un attribut ou méthode inexistant | Vérifier la documentation du type d'objet, corriger le nom de l'attribut |
IndexError: list index out of range |
Tentative d'accès à un index qui n'existe pas dans la liste | Vérifier la longueur de la liste, les index commencent à 0 et finissent à len(liste)-1 |
KeyError: 'clé' |
Tentative d'accès à une clé inexistante dans un dictionnaire | Vérifier que la clé existe avec if clé in dict ou utiliser dict.get('clé') |
ValueError: invalid literal for int() |
Conversion impossible (ex: int("abc")) | S'assurer que la chaîne contient bien un nombre avant conversion |
ImportError / ModuleNotFoundError |
Module non trouvé lors de l'import | Installer le module avec pip (pip install nom_module) |
ZeroDivisionError: division by zero |
Division par zéro | Ajouter une condition pour éviter la division par zéro |
FileNotFoundError: No such file or directory |
Fichier spécifié n'existe pas | Vérifier le chemin du fichier, utiliser un chemin absolu ou vérifier le répertoire courant |
TypeError: 'x' object is not callable |
Tentative d'appeler quelque chose qui n'est pas une fonction | Vérifier qu'on n'écrase pas une fonction avec une variable, retirer les () si ce n'est pas un appel |
IndentationError: unindent does not match any outer indentation level |
Indentation incohérente (mélange espaces/tabs) | Utiliser uniquement des espaces (4 par niveau) ou uniquement des tabs, pas les deux |
SyntaxError: EOL while scanning string literal |
Guillemet de fermeture manquant dans une chaîne | Ajouter le guillemet manquant, vérifier les sauts de ligne dans les chaînes |
TypeError: 'x' object is not iterable |
Tentative de boucler sur un objet non-itérable | S'assurer que l'objet est une liste, tuple, string, etc. Utiliser range() pour les nombres |
UnboundLocalError: local variable 'x' referenced before assignment |
Variable locale utilisée avant d'être définie dans une fonction | Définir la variable avant usage ou utiliser global/nonlocal si nécessaire |
RecursionError: maximum recursion depth exceeded |
Trop d'appels récursifs (boucle infinie) | Ajouter une condition de base pour arrêter la récursion, augmenter la limite si nécessaire |
TypeError: missing required positional argument |
Argument obligatoire manquant lors de l'appel d'une fonction | Fournir tous les arguments requis ou définir des valeurs par défaut |
MemoryError |
Mémoire insuffisante pour l'opération | Réduire la taille des données, utiliser des générateurs, optimiser le code |
StopIteration |
Itérateur épuisé (souvent lors d'appels next() manuels) | Utiliser une boucle for ou vérifier qu'il reste des éléments avant next() |
AssertionError |
Assertion échouée (utilisée pour les tests) | Corriger le code pour que la condition soit vraie ou retirer l'assertion |
OSError / IOError |
Erreur lors d'opérations système ou fichiers | Vérifier les permissions, l'espace disque, que le fichier n'est pas déjà ouvert |
TypeError: can only concatenate str (not "int") to str |
Tentative de concaténer des types incompatibles | Convertir en string avec str() avant concaténation |
ValueError: too many values to unpack |
Nombre de variables ne correspond pas au nombre de valeurs à décompresser | Ajuster le nombre de variables ou utiliser * pour capturer le reste |
SyntaxError: keyword can't be an expression |
Utilisation incorrecte d'un mot-clé comme argument | Vérifier la syntaxe de l'appel de fonction, utiliser des noms valides |
RuntimeError: dictionary changed size during iteration |
Modification d'un dictionnaire pendant qu'on itère dessus | Itérer sur une copie : for k in list(dict.keys()) |
OverflowError: math range error |
Résultat numérique trop grand pour être représenté | Utiliser des types de données plus grands ou vérifier les calculs |
UnicodeDecodeError / UnicodeEncodeError |
Problème d'encodage/décodage de caractères | Spécifier l'encodage correct (utf-8, latin-1, etc.) lors de la lecture/écriture |
TypeError: 'NoneType' object is not subscriptable |
Tentative d'indexer None (souvent fonction qui ne retourne rien) | Vérifier que la fonction retourne bien quelque chose, ajouter un return |
AttributeError: 'NoneType' object has no attribute 'x' |
Appel de méthode sur None | Vérifier que l'objet n'est pas None avant d'accéder à ses attributs |
SyntaxError: positional argument follows keyword argument |
Argument positionnel après un argument nommé | Placer tous les arguments positionnels avant les arguments nommés |
TabError: inconsistent use of tabs and spaces |
Mélange de tabulations et espaces pour l'indentation | Convertir tout en espaces (recommandé) ou tout en tabs |
PermissionError: Permission denied |
Permissions insuffisantes pour accéder au fichier/dossier | Exécuter avec les bonnes permissions ou modifier les permissions du fichier |
ValueError: substring not found |
Chaîne recherchée non trouvée (méthode .index()) | Utiliser .find() qui retourne -1 au lieu de lever une exception, ou vérifier avant |
TypeError: 'float' object cannot be interpreted as an integer |
Float utilisé là où un entier est requis (ex: range()) | Convertir en int avec int() ou utiliser des entiers dès le départ |
KeyboardInterrupt |
Programme interrompu par Ctrl+C | Normal si intentionnel, sinon gérer avec try/except pour nettoyer avant de quitter |
Erreurs Pandas
| Erreur | Description | Quoi corriger |
|---|---|---|
KeyError: 'colonne' |
Colonne spécifiée n'existe pas dans le DataFrame | Vérifier le nom exact avec df.columns, respecter majuscules/minuscules |
ValueError: Length of values does not match length of index |
Nombre d'éléments ne correspond pas à la longueur de l'index | S'assurer que la liste/array a la même longueur que le DataFrame |
AttributeError: 'DataFrame' object has no attribute 'x' |
Méthode ou attribut inexistant pour un DataFrame | Vérifier la documentation Pandas, souvent confusion entre Series et DataFrame |
TypeError: cannot concatenate 'str' and 'float' |
Opération entre types incompatibles dans une colonne | Convertir avec astype(str) ou astype(float), gérer les valeurs NaN |
ParserError: Error tokenizing data |
Problème lors de la lecture d'un fichier CSV | Vérifier le séparateur, l'encodage, ou utiliser on_bad_lines='skip' |
ValueError: Cannot mask with non-boolean array |
Utilisation d'un masque non-booléen pour filtrer | S'assurer que la condition de filtrage retourne des valeurs True/False |
SettingWithCopyWarning |
Modification d'une copie plutôt que l'original | Utiliser .loc[] ou .copy() explicitement pour clarifier l'intention |
ValueError: cannot reindex from a duplicate axis |
Index contient des doublons lors d'un reindex | Supprimer les doublons avec drop_duplicates() ou utiliser keep='first'/'last' |
TypeError: 'Series' object is not callable |
Tentative d'appeler une Series comme une fonction (souvent après avoir écrasé une méthode) | Renommer la variable qui écrase la méthode, utiliser la bonne syntaxe |
ValueError: The truth value of a Series is ambiguous |
Utilisation de and/or au lieu de &/| dans les conditions | Utiliser & et | pour les opérations booléennes, mettre les conditions entre parenthèses |
TypeError: unhashable type: 'list' |
Tentative d'utiliser une liste comme clé de dictionnaire ou index | Convertir en tuple ou utiliser un type hashable |
ValueError: could not convert string to float |
Conversion impossible d'une chaîne en nombre | Nettoyer les données (espaces, caractères spéciaux), utiliser pd.to_numeric() avec errors='coerce' |
IndexError: single positional indexer is out-of-bounds |
Index hors limites lors de l'utilisation de .iloc | Vérifier la longueur du DataFrame, utiliser des index valides |
AttributeError: 'Series' object has no attribute 'columns' |
Tentative d'accéder à .columns sur une Series | Les Series ont .name et .index, pas .columns. Convertir en DataFrame si nécessaire |
ValueError: Usecols do not match columns |
Colonnes spécifiées dans usecols n'existent pas dans le CSV | Vérifier les noms de colonnes dans le fichier, corriger usecols |
MemoryError: Unable to allocate array |
DataFrame trop grand pour la mémoire disponible | Lire par morceaux avec chunksize, utiliser dtypes optimisés, filtrer les colonnes |
KeyError: 0 |
Tentative d'accès par label au lieu de position | Utiliser .iloc[0] pour l'accès par position, .loc pour l'accès par label |
ValueError: Cannot convert non-finite values (NA or inf) to integer |
Présence de NaN lors de conversion en entier | Remplir ou supprimer les NaN avant conversion, utiliser Int64 (nullable integer) |
TypeError: ufunc 'add' did not contain a loop |
Types de données incompatibles pour l'opération | Vérifier et convertir les types de colonnes avec .astype() |
ValueError: Excel does not support datetimes with timezones |
Datetime avec timezone lors de l'export Excel | Retirer le timezone avec .dt.tz_localize(None) ou convertir en UTC |
Erreurs Matplotlib
| Erreur | Description | Quoi corriger |
|---|---|---|
ValueError: x and y must have same first dimension |
Les arrays x et y n'ont pas la même longueur | Vérifier que len(x) == len(y) avant le tracé |
AttributeError: 'Figure' object has no attribute 'plot' |
Confusion entre Figure et Axes | Utiliser ax.plot() au lieu de fig.plot(), ou plt.plot() |
TypeError: 'AxesSubplot' object is not subscriptable |
Tentative d'indexation incorrecte sur un objet Axes | Si un seul subplot, pas besoin d'index. Sinon, utiliser axes[i] correctement |
ValueError: shape mismatch: objects cannot be broadcast |
Dimensions incompatibles pour imshow ou pcolormesh | Vérifier les dimensions des données 2D avec .shape |
UserWarning: Matplotlib is currently using agg |
Backend non-interactif utilisé | Changer le backend avec matplotlib.use('TkAgg') ou utiliser plt.show() |
RuntimeError: main thread is not in main loop |
Problème de threading avec l'interface graphique | Appeler plt.show() dans le thread principal uniquement |
ValueError: color kwarg must be a color or sequence of colors |
Couleur invalide ou nombre incorrect de couleurs | Utiliser des noms de couleurs valides, codes hex, ou RGB. Vérifier le nombre de couleurs |
TypeError: Image data of dtype object cannot be converted to float |
Données d'image de type object au lieu de numérique | Convertir en array numpy avec le bon dtype (float ou uint8) |
ValueError: posx and posy should be finite values |
Coordonnées infinies ou NaN dans les données | Nettoyer les données, supprimer NaN et valeurs infinies |
AttributeError: Unknown property 'xxx' |
Propriété invalide passée à une fonction matplotlib | Vérifier la documentation pour les propriétés valides (linewidth, color, etc.) |
ValueError: num must be 1 <= num <= 20, not 0 |
Numéro de sous-graphique invalide | Les numéros de subplot commencent à 1, pas 0 |
TypeError: ufunc 'isfinite' not supported for the input types |
Type de données non supporté pour la vérification de finitude | Convertir les données en types numériques (float, int) |
RuntimeError: No mappable was found to use for colorbar |
Tentative de créer une colorbar sans objet mappable | S'assurer qu'un objet avec couleurs (scatter, imshow) existe avant plt.colorbar() |
ValueError: Unable to determine Axes to steal space for Colorbar |
Axes non spécifié pour la colorbar | Passer l'argument ax= à plt.colorbar() |
Erreurs SciPy
| Erreur | Description | Quoi corriger |
|---|---|---|
ValueError: object too deep for desired array |
Structure de données irrégulière (listes de longueurs différentes) | S'assurer que toutes les sous-listes ont la même longueur |
LinAlgError: Singular matrix |
Matrice singulière (non inversible) dans une opération d'algèbre linéaire | Vérifier que la matrice n'est pas singulière, ajuster les données ou la méthode |
ValueError: expected 1D or 2D array, got nD array instead |
Dimensions incorrectes pour la fonction appelée | Reshape l'array avec .reshape() ou .flatten() selon le besoin |
ValueError: array must not contain infs or NaNs |
Présence de valeurs infinies ou NaN dans les données | Nettoyer les données avec np.isnan(), np.isinf(), remplacer ou supprimer |
OptimizeWarning: Covariance of the parameters could not be estimated |
Problème de convergence dans l'optimisation | Fournir de meilleures valeurs initiales, vérifier la qualité des données |
IntegrationWarning: The maximum number of subdivisions |
Intégration numérique n'a pas convergé | Augmenter le nombre de subdivisions ou ajuster les limites d'intégration |
RuntimeWarning: divide by zero encountered |
Division par zéro dans un calcul vectorisé | Filtrer les zéros avant le calcul ou utiliser np.seterr() pour gérer l'erreur |
ValueError: The number of observations cannot be determined |
Données insuffisantes pour l'analyse statistique | Fournir plus de données ou vérifier le format d'entrée |
ValueError: matrices are not aligned |
Dimensions incompatibles pour multiplication matricielle | Vérifier que les dimensions permettent la multiplication (m×n et n×p) |
LinAlgError: SVD did not converge |
Décomposition SVD n'a pas convergé | Vérifier les données pour valeurs extrêmes, essayer une autre méthode |
ValueError: Input contains NaN, infinity or a value too large |
Valeurs invalides détectées dans les données | Nettoyer les données avant le traitement |
OptimizeWarning: Desired error not necessarily achieved due to precision loss |
Précision insuffisante dans l'optimisation | Ajuster les tolérances, utiliser des données mieux conditionnées |
ValueError: Residuals are not finite in the initial point |
Point de départ invalide pour l'optimisation | Choisir de meilleures valeurs initiales |
Erreurs NumPy
| Erreur | Description | Quoi corriger |
|---|---|---|
ValueError: setting an array element with a sequence |
Tentative d'assigner une séquence là où un scalaire est attendu | Vérifier la structure des données, utiliser dtype=object si nécessaire |
ValueError: operands could not be broadcast together |
Dimensions incompatibles pour une opération entre arrays | Vérifier les shapes avec .shape, utiliser reshape ou broadcasting correctement |
AxisError: axis X is out of bounds for array of dimension Y |
Axe spécifié n'existe pas pour cet array | Vérifier le nombre de dimensions avec .ndim, utiliser un axe valide |
ValueError: cannot reshape array of size X into shape Y |
Reshape impossible car le nombre total d'éléments ne correspond pas | S'assurer que le produit des dimensions est égal au nombre d'éléments |
TypeError: ufunc 'xxx' not supported for the input types |
Fonction universelle non supportée pour ces types | Convertir les arrays au bon type (int, float, etc.) |
ValueError: all the input arrays must have same number of dimensions |
Arrays avec différents nombres de dimensions | Ajouter des dimensions avec np.newaxis ou reshape |
ValueError: zero-size array to reduction operation which has no identity |
Opération de réduction sur array vide sans valeur par défaut | Vérifier que l'array n'est pas vide ou fournir une valeur initiale |
MemoryError: Unable to allocate X GiB |
Array trop grand pour la mémoire | Réduire la taille, utiliser dtype plus petit, ou traiter par morceaux |
IndexError: too many indices for array |
Trop d'index pour les dimensions de l'array | Vérifier le nombre de dimensions avec .ndim, utiliser le bon nombre d'index |
ValueError: negative dimensions are not allowed |
Dimension négative dans la création d'array | Utiliser des dimensions positives |