Consigner une erreur avec les informations de débogage en Python
-
Utilisez la méthode
exception()
pour enregistrer une erreur avec des informations de débogage détaillées en Python -
Utilisez la méthode
exception()
avecstack_info
pour enregistrer une erreur avec des informations de débogage détaillées dans Python 3.2+ -
Utilisez la méthode
exception()
avecexc_info
pour enregistrer une erreur avec des informations de débogage détaillées dans Python 3.5+
Cet article explique comment consigner une erreur avec des informations de débogage détaillées en Python.
Pour afficher des informations de débogage détaillées, importez la bibliothèque logging
en Python et utilisez la méthode logging.exception()
. Il affichera le message d’erreur et la trace de la pile.
Nous savons que la chaîne d’exception vous aidera à comprendre l’erreur exacte qui s’est produite dans Python. En dehors de cela, nous pouvons déterminer des informations détaillées sur l’exception et la ligne de code qui a généré l’exception.
Appelez la méthode logging.exception()
dans le bloc de code except
; cela permet d’afficher une trace de pile avec le message d’erreur. Sur ce logger, il enregistre le message de niveau ERROR
. Les informations sur l’exception sont ajoutées au message de journalisation.
Utilisez la méthode exception()
pour enregistrer une erreur avec des informations de débogage détaillées en Python
Voici un exemple qui montre comment vous pouvez consigner une erreur avec des informations de débogage détaillées en Python.
import logging
def fnc_divide(n):
try:
result = n / 0
print("The result=", result)
except:
print("The except block")
logging.exception("The detailed error message -")
fnc_divide(5)
Production:
The except block
ERROR:root:The detailed error message -
Traceback (most recent call last):
File "C:/Users/../a.py", line 4, in fnc_divide
result=n/0
ZeroDivisionError: division by zero
Notez que dans la sortie, les informations détaillées sont affichées concernant l’erreur, comme indiqué ci-dessous.
- Il mentionne le module/la fonction où l’erreur s’est produite. Dans cet exemple, la sortie affiche que l’erreur s’est produite dans la méthode
fnc_divide()
. - Il mentionne le numéro de ligne où l’erreur s’est produite. Dans cet exemple, la sortie affiche que l’erreur s’est produite sur la ligne numéro 4.
- Il mentionne l’erreur exacte. Dans cet exemple, il s’agit de
ZeroDivisionError: division by zero
.
Utilisez la méthode exception()
avec stack_info
pour enregistrer une erreur avec des informations de débogage détaillées dans Python 3.2+
À partir de Python 3.2+, vous pouvez passer l’argument stack_info
comme True
. Il montre comment vous êtes arrivé à un point particulier du code ; c’est également le cas lorsqu’aucune exception n’est soulevée.
Si stack_info
est True
, les informations de la pile sont ajoutées au message de journalisation, plus l’appel de journalisation réel, et sont associées aux trames de la pile dans l’ordre. L’ordre va du bas de la pile jusqu’à l’appel de journalisation dans le thread actuel.
Regardez cet exemple de code ci-dessous.
import logging
def fnc_dividestack(n):
try:
result = n / 0
except Exception:
logging.exception("The detailed error message -", stack_info=True)
fnc_dividestack(4)
Production:
ERROR:root:The detailed error message -
Traceback (most recent call last):
File "C:/Users/Ri..error.py", line 5, in fnc_dividestack
result=n/0
ZeroDivisionError: division by zero
Stack (most recent call last):
File "C:/Users/Ri..error.py", line 9, in <module>
fnc_dividestack(4)
File "C:/Users/Ri..error.py", line 7, in fnc_dividestack
logging.exception("The detailed error message -", stack_info=True)
Utilisez la méthode exception()
avec exc_info
pour enregistrer une erreur avec des informations de débogage détaillées dans Python 3.5+
À partir de Python 3.5+, vous pouvez passer une instance d’exception dans l’argument exc_info
. Ce paramètre accepte les instances d’exception.
Notez que le tuple exc_info
contient les informations d’exception en cours si une exception se produit ; sinon, il contient None
. Vous trouverez ci-dessous un exemple qui illustre ce processus.
import logging
def fnc_divide(n):
try:
result = n / 0
print("The result=", result)
except Exception as e:
logging.exception("The exc_info - Zero Division error", exc_info=e)
fnc_divide(5)
Production:
ERROR:root:The exc_info - Zero Division error
Traceback (most recent call last):
File "C:/Users/R..ror.py", line 4, in fnc_divide
result=n/0
ZeroDivisionError: division by zero