21.3. cgitb — Gestionnaire d’exceptions pour les scripts CGI

Code source : Lib/cgitb.py


Le module cgitb fournit un gestionnaire d’exceptions spécifique pour les scripts Python. (Son nom est trompeur : Il a été conçu à l’origine pour afficher des pile d’appels en HTML pour les scripts CGI, puis a été généralisé par la suite pour afficher cette information en texte brut.) Une fois ce module activé, si une exception remonte jusqu’à l’interpréteur, un rapport détaillé sera affiché. Le rapport affiche la pile d’appels, montrant des extraits de code pour chaque niveau, ainsi que les arguments et les variables locales des fonctions appelantes pour vous aider à résoudre le problème. Il est aussi possible de sauvegarder cette information dans un fichier plutôt que de l’envoyer dans le navigateur.

Pour activer cette fonctionnalité, ajoutez simplement ceci au début de votre script CGI :

import cgitb
cgitb.enable()

Les paramètres optionnels de la fonction enable() permettent de choisir si le rapport est envoyé au navigateur ou si le rapport est écrit dans un fichier pour analyse ultérieure.

cgitb.enable(display=1, logdir=None, context=5, format="html")

Appeler cette fonction remplace le gestionnaire d’exceptions par défaut de l’interpréteur par celui du module cgitb, en configurant sys.excepthook.

Le paramètre optionnel display vaut 1 par défaut, et peut être mis à 0 pour désactiver l’envoi des piles d’appels au navigateur. Si l’argument logdir est donné les piles d’appels seront écrites dans des fichiers placés dans le dossier logdir. L’argument optionnel context est le nombre de lignes de code à afficher autour de la ligne courante dans le code source à chaque niveau de la pile d’appel, il vaut 5 par défaut. Si l’argument optionnel format est "html", le rapport sera rédigé en HTML. Le rapport sera écrit en texte brut pour toute autre valeur. La valeur par défaut est "html".

cgitb.handler(info=None)

Cette fonction gère les exceptions en utilisant la configuration par défaut (c’est à dire envoyer un rapport HTML au navigateur sans l’enregistrer dans un fichier). Il peut être utilisé lorsque vous avez attrapé une exception et que vous en voulez un rapport généré par cgitb. L’argument optionnel info doit être un tuple de trois éléments contenant le type de l’exception, l’exception, et la pile d’appels, tel que le tuple renvoyé par sys.exc_info(). Si l’argument info n’est pas donné, l’exception courante est obtenue via sys.exc_info().