Python >> Tutoriel Python >  >> Python

Comment imprimer l'exception sans quitter votre programme Python ?

Formulation du problème

Étant donné un programme Python de base. Comment imprimer une exception si elle se produit sans quitter le programme ?

Par exemple, considérez le programme suivant qui déclenche un ZeroDivisionError: division by zero .

x = 42/0
print('Program is still running')

La sortie est :

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 1, in <module>
    x = 42/0
ZeroDivisionError: division by zero

Vous voulez que le programme continue à s'exécuter et à exécuter l'instruction d'impression après vous avoir donné une note sur l'exception :

division by zero
Program is still running

Comment faire cela en Python ?

Solution de base :Essayer/Excepter

Une exception mettra immédiatement fin à votre programme. Pour éviter cela, vous pouvez attraper l'exception avec un try/except bloquer autour du code où vous vous attendez à ce qu'une certaine exception puisse se produire. Voici comment vous interceptez et imprimez une exception donnée :

Pour intercepter et imprimer une exception qui s'est produite dans un extrait de code, encapsulez-le dans un try en retrait bloc, suivi de la commande "except Exception as e" qui intercepte l'exception et enregistre son message d'erreur dans la variable chaîne e . Vous pouvez maintenant imprimer le message d'erreur avec "print(e)" ou l'utiliser pour un traitement ultérieur.

Voici le cadre général de gestion des exceptions :

try:
    # ... YOUR CODE HERE ... #
except Exception as e:
    # ... PRINT THE ERROR MESSAGE ... #
    print(e)

Dans notre exemple particulier, vous modifieriez votre programme à partir de …

x = 42/0
print('Program is still running')

… à …

try:
    x = 42/0
except Exception as e:
    print(e)

print('Program is still running')

Maintenant, la sortie est celle que vous souhaitez :

division by zero
Program is still running

Message d'erreur de retraçage complet

Pour imprimer la trace complète du message d'erreur et maintenir le programme en cours d'exécution sans quitter en cas d'erreur, vous pouvez utiliser un bloc try/except en combinaison avec le traceback format_exc() du module fonction.

  • Importer le module avec import traceback .
  • Imprimer la trace complète de l'erreur avec print(traceback.format_exc()) .

Voici l'exemple de code complet :

import traceback
import sys

try:
    x = 42/0
except Exception:
    print(traceback.format_exc())


print('Program is still running')

Maintenant, la sortie montre le suivi complet comme ceci :

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 5, in <module>
    x = 42/0
ZeroDivisionError: division by zero

Program is still running

La dernière ligne indique que le programme ne se termine pas lorsque l'exception se produit.

Résumé

Pour imprimer une exception sans quitter le programme, utilisez un bloc try/except et affectez l'objet exception à la variable e en utilisant except Exception as e . Maintenant, appelez le print(e) dans le except branche pour imprimer un simple message d'erreur.

Si vous avez besoin d'un message d'erreur plus avancé avec une traçabilité complète, importez le traceback module et appelez print(traceback.format_exc()) dans le except succursale.