Gestion des erreurs (Flask)
Dans Flask, la gestion des erreurs consiste à intercepter et traiter les situations où une requête ne peut pas être exécutée correctement.
Cela permet de contrôler la réponse envoyée au client, plutôt que de laisser Flask renvoyer un message d’erreur brut.
Comment ça fonctionne dans Flask
Déclencher une erreur
-
Utiliser
abort(code)
pour interrompre le traitement et renvoyer un code HTTP spécifique (ex.abort(404)
pour “Not Found”). -
Lever une exception Python (ex.
ValueError
) et la gérer via un gestionnaire d’erreurs.
Définir un gestionnaire d’erreurs personnalisé
-
Avec
@app.errorhandler(code)
, on définit une fonction qui sera appelée automatiquement lorsqu’une erreur de ce type est levée. -
Ce gestionnaire peut retourner :
-
Un message clair au format JSON (souvent pour les API).
-
Une page HTML personnalisée (pour les sites web).
-
Des en-têtes HTTP supplémentaires pour préciser le type d’erreur.
-
Codes HTTP courants
-
400 : Mauvaise requête (Bad Request)
-
401 : Non autorisé (Unauthorized)
-
403 : Accès interdit (Forbidden)
-
404 : Ressource non trouvée (Not Found)
-
500 : Erreur interne du serveur (Internal Server Error)
Exemple conceptuel
-
URL / endpoint :
/users/<id>
-
Comportement : si
<id>
ne correspond à aucun utilisateur, renvoyer une erreur 404 avec un message JSON clair. -
Méthode HTTP : GET
-
Réponse : JSON
{ "error": "User not found" }
avec code HTTP 404.
Bonnes pratiques
-
Format uniforme : toutes les erreurs renvoient le même format de réponse (JSON, HTML…).
-
Messages explicites : expliquer le problème sans exposer d’informations sensibles.
-
Centralisation : définir tous les gestionnaires d’erreurs dans un même fichier pour faciliter la maintenance.
-
Validation en amont : vérifier les paramètres et les données avant traitement pour éviter des erreurs en cascade.
-
Gestion des erreurs serveur : intercepter les exceptions imprévues avec un gestionnaire global (500).
Pourquoi c’est important
-
Améliore l’expérience utilisateur en fournissant des messages compréhensibles.
-
Facilite le débogage et le suivi en développement.
-
Rend l’API ou l’application plus robuste et plus professionnelle.
En résumé
-
Les erreurs sont interceptées et traitées pour fournir des réponses claires.
-
Les codes HTTP renseignent sur la nature du problème.
-
Flask permet de personnaliser la gestion des erreurs pour mieux informer les clients.
Fonctions :
-
Gestion des erreurs dans Flask (exemple)
Exemple de code :
from flask import Flask, jsonify, render_template app = Flask(__name__) # 1️⃣ Route d'accueil @app.route("/") def home(): return "Bienvenue sur la page d'accueil !" # 2️⃣ Route qui provoque volontairement une erreur @app.route("/divide/<int:x>/<int:y>") def divide(x, y): if y == 0: # lever une erreur personnalisée return jsonify({"error": "Division par zéro interdite"}), 400 return jsonify({"result": x / y}) # 3️⃣ Gestion d'une erreur 404 (page non trouvée) @app.errorhandler(404) def page_not_found(e): return "<h1>Erreur 404</h1><p>La page demandée n'existe pas.</p>", 404 # 4️⃣ Gestion d'une erreur 500 (erreur serveur) @app.errorhandler(500) def internal_error(e): return "<h1>Erreur 500</h1><p>Une erreur interne est survenue.</p>", 500 if __name__ == "__main__": app.run(debug=True)
Explication du code :
from flask import Flask, jsonify, render_template
importe la classe Flask pour créer l’application web,jsonify
pour générer des réponses JSON, etrender_template
(non utilisé ici mais pratique si on veut renvoyer des pages HTML avec Jinja2).app = Flask(__name__)
crée une instance de l’application Flask.1️⃣ Route d’accueil
@app.route("/")
définit la page d’accueil de l’application.
La fonctionhome()
retourne une simple chaîne de caractères affichée par le navigateur.2️⃣ Route qui provoque une erreur personnalisée
@app.route("/divide/<int:x>/<int:y>")
définit une route qui prend deux nombres en paramètres (x
ety
).
La fonctiondivide()
divisex
pary
et retourne le résultat au format JSON.- Si
y
est différent de zéro, la division est effectuée et la réponse est{"result": valeur}
. - Si
y == 0
, on retourne une réponse JSON avec un message d’erreur et un code HTTP 400 (Bad Request).
3️⃣ Gestion de l’erreur 404 (page non trouvée)
@app.errorhandler(404)
définit une fonction qui sera appelée automatiquement lorsqu’un utilisateur accède à une page inexistante.
La fonctionpage_not_found(e)
retourne une page HTML simple avec un titre Erreur 404 et un code HTTP404
.4️⃣ Gestion de l’erreur 500 (erreur serveur)
@app.errorhandler(500)
définit une fonction exécutée lorsqu’une erreur interne survient dans l’application.
La fonctioninternal_error(e)
retourne une page HTML avec le message Erreur 500 et un code HTTP500
.5️⃣ Lancer l’application Flask
if __name__ == "__main__":
vérifie que le fichier est exécuté directement et non importé comme module.app.run(debug=True)
lance le serveur local Flask en mode debug, ce qui permet de voir les erreurs détaillées et de recharger automatiquement l’application après chaque modification. - Si