Codes d'erreur Python
Les codes d'erreur Python représentent un ensemble d’exceptions et d’erreurs signalées par l’interpréteur lorsque le programme rencontre des situations inattendues. Comprendre ces codes est essentiel pour les développeurs avancés afin de faciliter le débogage, assurer la robustesse du code et améliorer la maintenabilité des applications. Dans le développement logiciel, les erreurs apparaissent lorsqu’une syntaxe est incorrecte, lorsqu’il y a un conflit de type, un accès à des ressources inexistantes ou des erreurs logiques. Les concepts clés incluent la syntaxe, les types d’exceptions, le débogage et la gestion des erreurs. En maîtrisant les codes d’erreur Python, le développeur peut localiser rapidement la source du problème, utiliser des blocs try/except
pour gérer efficacement les exceptions et consigner des informations diagnostiques utiles pour la production. Ce document offre une vue complète des erreurs courantes, de leurs conditions de déclenchement, des techniques de débogage et des meilleures pratiques pour la gestion des exceptions dans des applications backend complexes. Les lecteurs apprendront à construire des systèmes stables et fiables, tout en minimisant les risques de plantage et de perte de données.
Considérons un service backend qui lit des entrées utilisateur, traite des fichiers et interagit avec une base de données. Des erreurs telles que FileNotFoundError
, ValueError
ou ZeroDivisionError
peuvent survenir. Pour assurer la continuité du service, les opérations susceptibles d’échouer sont placées dans un bloc try
, et chaque type d’exception est capturé avec un bloc except
approprié. Cela permet de définir des stratégies de gestion spécifiques, de consigner les informations de débogage et de fournir des mécanismes de secours. Le bloc finally
garantit que les ressources critiques, comme les fichiers ou les connexions à la base de données, sont correctement libérées, indépendamment de la survenue d’une erreur. Ce schéma empêche les plantages du programme et améliore la fiabilité et la maintenabilité du système. Dans les applications backend réelles, une gestion adéquate des erreurs est cruciale pour la stabilité, la performance et la confiance des utilisateurs.
Example
pythondef traiter_donnees():
try:
# NameError : utilisation d'une variable non définie
print(variable_inexistante)
# ZeroDivisionError : division par zéro
resultat = 10 / 0
# ValueError : conversion de type invalide
nombre = int("abc")
# FileNotFoundError : fichier inexistant
with open("fichier_inexistant.txt", "r") as f:
contenu = f.read()
# AttributeError : appel d'une méthode inexistante
[].appendx(1)
except NameError as ne:
print(f"Capture NameError : {ne}")
except ZeroDivisionError as zde:
print(f"Capture ZeroDivisionError : {zde}")
except ValueError as ve:
print(f"Capture ValueError : {ve}")
except FileNotFoundError as fe:
print(f"Capture FileNotFoundError : {fe}")
except AttributeError as ae:
print(f"Capture AttributeError : {ae}")
except Exception as e:
print(f"Capture exception générale : {e}")
finally:
print("Exécution des opérations de nettoyage (fermeture de fichiers, libération de ressources)")
traiter_donnees()
📊 Comprehensive Reference
Error | Description | When It Occurs | Example | Notes |
---|---|---|---|---|
SyntaxError | Erreur de syntaxe | Code invalide | eval('x === 2') |
Détectée à la compilation |
IndentationError | Erreur d'indentation | Indentation incohérente | if True:\nprint("Hi") |
Sous-classe de SyntaxError |
TabError | Mélange tabulations et espaces | Tabs et espaces mélangés | <tab> <space> print("Hi") |
Maintenir cohérence indentation |
NameError | Variable non définie | Utilisation d'une variable non déclarée | print(x) |
Erreur fréquente au débogage |
TypeError | Type incorrect | Opération avec types incompatibles | 5 + "5" |
Type dynamique Python |
ValueError | Valeur invalide | Conversion ou opération sur valeur incorrecte | int("abc") |
Vérification des entrées |
IndexError | Indice hors limites | Accès hors de la liste | lst = []; lst[1] |
Vérifier longueur avant accès |
KeyError | Clé manquante | Clé absente dans dictionnaire | d = {}; d['x'] |
Utiliser dict.get() pour prévenir |
AttributeError | Attribut inexistant | Objet sans l'attribut ou méthode | [].appendx(1) |
Erreur nom méthode |
ZeroDivisionError | Division par zéro | Diviseur est zéro | 10 / 0 |
Vérifier diviseur |
ImportError | Module inexistant | Module non trouvé | import non_module |
Vérifier installation module |
ModuleNotFoundError | Module introuvable | Module absent | import non_existent_module |
Python 3.6+ |
FileNotFoundError | Fichier inexistant | Ouverture d’un fichier absent | open("nofile.txt") |
Vérifier chemin fichier |
IsADirectoryError | Attendu fichier mais répertoire | open("folder") |
OS spécifique | |
NotADirectoryError | Attendu répertoire mais fichier | os.listdir("file.txt") |
OS spécifique | |
PermissionError | Permission insuffisante | Accès fichier interdit | open("/root/file") |
Vérifier permissions utilisateur |
OSError | Erreur système | Problème système ou OS | os.remove("/root/file") |
Base de plusieurs erreurs |
OverflowError | Dépassement numérique | Valeur trop grande | 2.0**10000 |
Rare en Python 3 |
RecursionError | Récursion trop profonde | Appel récursif excessif | def f(): f(); f() |
sys.setrecursionlimit() |
MemoryError | Mémoire insuffisante | Allocation objet volumineux échoue | a = 'a' * 10**10 |
Dépend mémoire système |
StopIteration | Itérateur épuisé | Next sur itérateur vide | next(iter([])) |
Itérateurs personnalisés |
AssertionError | Assertion échouée | assert False |
Vérification condition | |
FloatingPointError | Erreur flottante | Opération flottante invalide | numpy.seterr(all='raise') |
Numpy |
UnicodeError | Erreur encodage/décodage | "ü".encode("ascii") |
Vérifier encodage | |
UnicodeDecodeError | Décodage impossible | b'\xff'.decode('utf-8') |
Lecture fichier | |
UnicodeEncodeError | Encodage impossible | "ü".encode("ascii") |
Encodage incorrect | |
RecursionWarning | Avertissement récursion | Recursion trop profonde | import warnings |
Non fatal |
DeprecationWarning | Fonction obsolète | Utilisation fonction dépréciée | warnings.warn("deprecated") |
Migration |
RuntimeWarning | Avertissement runtime | Problème potentiel à l’exécution | import warnings |
Non fatal |
FutureWarning | Avertissement futur | Fonction changera | warnings.warn("future") |
Compatibilité |
UserWarning | Avertissement utilisateur | Avertissement personnalisé | warnings.warn("user") |
Non fatal |
PendingDeprecationWarning | Obsolescence prochaine | Fonction potentiellement dépréciée | warnings.warn("pending") |
Rare |
ResourceWarning | Ressource non libérée | Fichier non fermé | open("file") |
Python 3+ |
ArithmeticError | Erreur arithmétique | Échec opération mathématique | int("x")/0 |
Base arithmétique |
BufferError | Erreur tampon | Opération tampon invalide | memoryview(b'').release() |
Rare |
ConnectionError | Erreur connexion | Échec réseau | requests.get("bad_url") |
Base réseau |
BrokenPipeError | Pipe cassé | Écriture pipe fermé | os.write(fd, b'data') |
Unix |
ChildProcessError | Erreur processus fils | Échec processus fils | os.waitpid(-1) |
Rare |
EOFError | Fin fichier inattendue | Fin de l'entrée | input() EOF |
Entrée vide |
EnvironmentError | Erreur environnement | Problème OS ou système | os.remove("/root/file") |
OSError base |
GeneratorExit | Générateur fermé | gen.close() |
Utilisé avec générateurs | |
IOError | Erreur I/O | Échec lecture/écriture | open("/root/file") |
Python 3 -> OSError |
InterruptedError | Interruption | Appel système interrompu | os.read(fd, 0) |
Unix |
LookupError | Erreur de recherche | Recherche invalide | d['x'] |
Base erreurs lookup |
ReferenceError | Référence invalide | Référence faible périmée | import weakref |
Rare |
RuntimeError | Erreur runtime | raise RuntimeError() |
Erreur générique | |
StopAsyncIteration | Fin itération async | async for |
Python 3.5+ | |
SyntaxWarning | Avertissement syntaxe | Syntaxe douteuse | warnings.warn("syntax") |
Ne stoppe pas programme |
SystemError | Erreur système | Erreur interne Python | sys._getframe(0) |
Rare |
SystemExit | Sortie système | Appel sys.exit() | Quitte programme | |
TimeoutError | Timeout | Opération dépasse délai | socket.settimeout() |
Appel réseau |
UnboundLocalError | Variable locale non liée | Référence avant affectation | x=1; def f(): print(x); x=2 |
NameError subclass |
ZeroDivisionError | Division par zéro | Diviseur = 0 | 10 / 0 |
Vérifier diviseur |
📊 Complete Properties Reference
Error | Exception Type | Default Behavior | Description | Compatibility |
---|---|---|---|---|
SyntaxError | Exception | Arrêt programme | Erreur syntaxe | Toutes versions Python |
IndentationError | SyntaxError | Arrêt programme | Erreur indentation | Toutes versions Python |
TabError | IndentationError | Arrêt programme | Mélange tabulations et espaces | Toutes versions Python |
NameError | Exception | Arrêt programme | Variable non définie | Toutes versions Python |
TypeError | Exception | Arrêt programme | Erreur de type | Toutes versions Python |
ValueError | Exception | Arrêt programme | Valeur invalide | Toutes versions Python |
IndexError | Exception | Arrêt programme | Indice hors limites | Toutes versions Python |
KeyError | Exception | Arrêt programme | Clé absente | Toutes versions Python |
AttributeError | Exception | Arrêt programme | Attribut/méthode manquante | Toutes versions Python |
ZeroDivisionError | ArithmeticError | Arrêt programme | Division par zéro | Toutes versions Python |
ImportError | Exception | Arrêt programme | Module non trouvé | Toutes versions Python |
ModuleNotFoundError | ImportError | Arrêt programme | Module manquant | Python 3.6+ |
FileNotFoundError | OSError | Arrêt programme | Fichier inexistant | Python 3+ |
IsADirectoryError | OSError | Arrêt programme | Fichier attendu mais répertoire | Python 3+ |
NotADirectoryError | OSError | Arrêt programme | Répertoire attendu mais fichier | Python 3+ |
PermissionError | OSError | Arrêt programme | Permission insuffisante | Python 3+ |
OSError | Exception | Arrêt programme | Erreur OS | Toutes versions Python |
OverflowError | ArithmeticError | Arrêt programme | Dépassement numérique | Toutes versions Python |
RecursionError | RuntimeError | Arrêt programme | Récursion trop profonde | Python 3+ |
MemoryError | Exception | Arrêt programme | Mémoire insuffisante | Toutes versions Python |
StopIteration | Exception | Arrêt programme | Itérateur épuisé | Toutes versions Python |
AssertionError | Exception | Arrêt programme | Assertion échouée | Toutes versions Python |
FloatingPointError | ArithmeticError | Arrêt programme | Erreur flottante | Toutes versions Python |
UnicodeError | ValueError | Arrêt programme | Erreur encodage/décodage | Toutes versions Python |
UnicodeDecodeError | UnicodeError | Arrêt programme | Décodage impossible | Toutes versions Python |
UnicodeEncodeError | UnicodeError | Arrêt programme | Encodage impossible | Toutes versions Python |
RecursionWarning | Warning | Programme continue | Avertissement récursion | Toutes versions Python |
DeprecationWarning | Warning | Programme continue | Fonction obsolète | Toutes versions Python |
RuntimeWarning | Warning | Programme continue | Avertissement runtime | Toutes versions Python |
FutureWarning | Warning | Programme continue | Avertissement futur | Toutes versions Python |
UserWarning | Warning | Programme continue | Avertissement utilisateur | Toutes versions Python |
PendingDeprecationWarning | Warning | Programme continue | Obsolescence prochaine | Toutes versions Python |
ResourceWarning | Warning | Programme continue | Ressource non libérée | Python 3+ |
ArithmeticError | Exception | Arrêt programme | Erreur arithmétique | Toutes versions Python |
BufferError | Exception | Arrêt programme | Erreur tampon | Toutes versions Python |
ConnectionError | OSError | Arrêt programme | Erreur connexion | Python 3+ |
BrokenPipeError | OSError | Arrêt programme | Pipe cassé | Python 3+ |
ChildProcessError | OSError | Arrêt programme | Erreur processus fils | Python 3+ |
EOFError | Exception | Arrêt programme | Fin fichier inattendue | Toutes versions Python |
EnvironmentError | OSError | Arrêt programme | Erreur environnement | Python 3+ |
GeneratorExit | Exception | Arrêt programme | Générateur fermé | Toutes versions Python |
IOError | OSError | Arrêt programme | Erreur I/O | Python 3+ |
InterruptedError | OSError | Arrêt programme | Interruption système | Python 3+ |
LookupError | Exception | Arrêt programme | Erreur de recherche | Toutes versions Python |
ReferenceError | Exception | Arrêt programme | Référence invalide | Python 3+ |
RuntimeError | Exception | Arrêt programme | Erreur runtime | Toutes versions Python |
StopAsyncIteration | Exception | Arrêt programme | Fin itération async | Python 3.5+ |
SyntaxWarning | Warning | Programme continue | Avertissement syntaxe | Toutes versions Python |
SystemError | Exception | Arrêt programme | Erreur interne Python | Toutes versions Python |
SystemExit | Exception | Arrêt programme | Sortie système | Toutes versions Python |
TimeoutError | OSError | Arrêt programme | Timeout | Python 3+ |
UnboundLocalError | NameError | Arrêt programme | Variable locale non liée | Python 3+ |
ZeroDivisionError | ArithmeticError | Arrêt programme | Division par zéro | Toutes versions Python |
🧠 Testez Vos Connaissances
Test Your Knowledge
Testez votre compréhension des codes d'erreur Python
📝 Instructions
- Lisez chaque question attentivement
- Sélectionnez la meilleure réponse pour chaque question
- Vous pouvez refaire le quiz autant de fois que vous le souhaitez
- Votre progression sera affichée en haut