Imprimer Stacktrace dans le journal Python

Imprimer Stacktrace Dans Le Journal Python



Une collection d'appels d'approche à un moment donné est représentée dans un stacktrace. Lorsqu'un programme lève une exception, Python génère un stacktrace, également appelé traceback ou backtrace. Il existe une variété de détails dans ce stacktrace qui peuvent être exploités pour localiser le problème. Le package de journalisation Python est livré avec plusieurs fonctionnalités fondamentales et comporte plusieurs niveaux de journalisation, notamment 'débogage', 'info', 'avertissement', 'erreur' et 'critique'.

Exemple 1 : Imprimer Stacktrace en Python à l'aide du module Traceback

Dans cet exemple, nous utiliserons un simple morceau de code pour montrer comment implémenter le module de trace de Python pour imprimer la trace de la pile. Ce package de rétrolien comprend une fonctionnalité appréciée pour collecter, stocker et afficher les traces de pile des langages informatiques. Il duplique fidèlement les opérations d'impression de trace de pile d'un script. Si jamais vous avez besoin de visualiser la trace de la pile, c'est essentiel.

En d'autres termes, une trace de pile affiche chaque opération qui a précédé celle qui a entraîné le problème. Les informations les plus importantes sont toujours signalées sur la dernière ligne d'une trace de pile, c'est-à-dire lorsque la panne est identifiée. Tous les appels de fonction dans l'erreur résultante peuvent être utilisés pour localiser et résoudre rapidement le problème.







Commençons par implémenter le code en important la bibliothèque Python de traceback. Ensuite, dans la ligne suivante, nous créons un tableau et listons les éléments avec certaines valeurs. Les valeurs de la liste de tableaux sont '7', '8', '9' et '10'. Il y a quatre valeurs dans la liste de tableaux. Cette liste de tableaux a été enregistrée dans la variable 'A' précédemment initialisée.



Ensuite, nous utilisons le terme 'essayer' et la valeur 'A=6' dans la ligne suivante. Nous utilisons les blocs try-except en Python pour gérer les exceptions. Cette approche est utilisée pour écrire le script susceptible de générer une erreur dans l'en-tête du bloc. Les exceptions sont essentiellement des erreurs, similaires aux erreurs de syntaxe. Lors d'une exception d'un programme, la gestion des exceptions est l'acte unique de répondre à l'exception. Revenant au script, nous utilisons 'excepté' dans la ligne suivante.



Dans le bloc sauf, nous utilisons 'traceback.print exc()' qui est l'abréviation de 'exception d'impression'. Nous utilisons la fonction 'print()' à l'intérieur de la boîte d'exception qui est 'fin du programme' afin que cette instruction s'imprime lorsque l'exception se produit. Désormais, si une exception se produit dans la zone d'essai, le programme passe immédiatement aux blocs except et continue. Si une exception ne se produit pas, le bloc d'exception est entièrement ignoré. Maintenant que l'exception se produit, nous pouvons voir dans le code que la valeur '6' a été saisie dans la zone d'essai, même si elle ne figure pas dans la liste des tableaux. Par conséquent, le code va immédiatement dans la zone d'exception et imprime l'instruction 'program ends' dans l'affichage de sortie.





Les différents appels de fonction qui composent la trace sont classés du plus récent au moins récent, du bas vers le haut. Ces opérations sont toutes représentées par des instructions sur deux lignes. Chaque appel commence par le nom du fichier, le numéro de séquence et le nom du module, qui indiquent tous l'emplacement du code. Après cela, il affiche l'instruction d'impression d'exception 'program end' puisque la valeur '6' ne figurait pas dans la liste déclarée, ce qui entraîne la sortie 'list index out of range'.



Exemple 2 : Imprimer Stacktrace en Python en utilisant la méthode Logging.Exception()

Dans cet exemple, nous allons montrer comment utiliser la méthode 'logging.exception()' de Python pour générer un stacktrace. Le package de journalisation en Python nous permet de consigner les erreurs ainsi que d'enregistrer les erreurs et les exceptions. Les modules de journalisation nous offrent une sélection de modules de journalisation, y compris 'debug', 'info', 'warning', 'error' et 'critical'. Ce sont essentiellement des couches de modules de journalisation, pour faire simple. Pour consigner une exception avec une erreur dans Python, utilisez la fonction 'logging.exception()'. Cette fonction ajoute un rapport avec l'état ERROR à cet enregistreur. On pense que les paramètres sont destinés au débogage. Les informations sur l'exception sont jointes au rapport de journalisation. Le seul emplacement à partir duquel appeler cette procédure doit être les gestionnaires d'exceptions.

Maintenant, regardons le code. Tout d'abord, nous importons deux bibliothèques - dont la première est la journalisation et la seconde est la trace. Ensuite, nous utilisons la méthode 'basicConfig' avec 'logging' et spécifions le niveau comme 'logging.Debug'. Le seul argument pris par la méthode 'getLogger()' est 'nom'. Ainsi, nous l'utilisons lors de l'utilisation de la fonction « logging.getlogger ». Si un nom est donné, une référence à une instance de journalisation portant ce nom est générée ; sinon, la racine est renvoyée. Le même objet logger est référencé par de nombreuses opérations getLogger() avec la même identité.

Ensuite, nous utilisons pour essayer, et comme nous le savons dans le bloc try, nous écrivons le code qui pourrait déclencher une exception. Dans ce cas, nous utilisons 'myfunction()'. Si la situation donnée ne correspond pas, une exception se produit. Ensuite, le code passe immédiatement au bloc except. Dans ce blog d'exception, nous utilisons le 'logging.info'. À l'intérieur de celui-ci, nous écrivons le message que nous voulons imprimer qui est 'une exception a eu lieu'. En effet, si une exception se produit, une erreur se produit simplement, puis elle affiche ce message à l'écran. Mais si l'erreur ne se produit pas, il ignore tout le message d'exception.

Nous définissons également le 'exc info=True' avec le message. L'ensemble du stacktrace sera inclus dans la journalisation lorsque l'information exc est définie sur True, similaire à ce qui se passe avec « logger.exception () ». La seule distinction est que vous pouvez rapidement faire passer le niveau de journalisation d'une erreur à autre chose en remplaçant simplement l'enregistreur.

Maintenant qu'une exception s'est produite dans le script, la première ligne de sortie est le message 'l'exception a eu lieu' suivi du niveau de journalisation utilisé dans le script qui est 'info'. Le nom de l'enregistreur apparaît comme racine dans ce cas. Ensuite, l'appel de trace apparaît, affichant les noms de module, de ligne et de fichier. Enfin, le message d'erreur 'myfunction' n'est pas défini.

Parlons d'un peu plus de code qui utilise la journalisation. La méthode exception() commence par importer la bibliothèque pour la journalisation. Ensuite, deux variables - 'm' et 'n' - sont initialisées et reçoivent les valeurs de '7' et '0', respectivement. Le bloc try est maintenant utilisé dans l'étape suivante. À l'intérieur, nous écrivons le code qui pourrait provoquer une exception. Tout d'abord, nous déclarons la variable 'o'. Ensuite, nous définissons ce 'm' divisé par 'n'. Cela provoque une exception car le dénominateur est zéro et nous ne pouvons diviser aucun nombre par zéro, ce qui signifie que des erreurs se produiront. En conséquence, le code saute au bloc sauf où 'logging.error' est utilisé. L'erreur est le niveau de journalisation. Si une exception se produit, nous imprimons un message ou une déclaration indiquant 'une exception s'est produite' et nous définissons 'exc info=true'. Si nous ne le définissons pas sur true, il imprime uniquement le bloc d'exception et n'affiche pas les informations de trace.

Parce que nous avons choisi le niveau 'ERREUR' dans notre script, il affiche d'abord la racine comme nom de l'enregistreur, suivi du message 'une exception s'est produite'. Les informations de trace qui comprenaient le nom de fichier, le numéro de ligne et le module sont alors affichées. La ligne suivante affiche alors un avis d'erreur puisque le dénominateur ne peut pas être zéro. Et puisque le dénominateur est zéro dans ce code, l'erreur est appelée erreur de diviseur zéro.

Conclusion

Dans cet article, nous avons examiné le processus d'impression d'un stacktrace dans un journal Python ainsi que l'utilisation du module traceback pour créer un stack trace. Dans le premier exemple, la bibliothèque traceback a été importée et les méthodes try et except ont été utilisées. Le code a été écrit dans la boîte d'essai. Si une exception se produit, il saute rapidement au bloc d'exception et affiche l'instruction d'exception à l'écran. Dans le deuxième exemple, nous avons utilisé la journalisation qui est similaire au premier exemple. La méthode exception() utilise les niveaux de journalisation 'info' et 'error'. Si une exception se produit, il affiche une instruction d'exception.