☀️
420-1G2-HU Logique de programmation
  • 👋Bienvenue dans le cours de logique de programmation!
  • Bases de la logique de programmation
    • Concepts de la programmation
    • Les opérateurs
      • Exercices
    • Les commentaires
  • Les données
    • Les données et types simples
    • Les variables, les constantes et les opérations de base
    • Les opérations d'écriture et de lecture
    • Les opérations sur les chaînes de caractères
    • Laboratoire 1 - données
    • Laboratoire 2 - données
  • Les collections de données
    • Les listes
    • Les opérations sur les listes
    • Laboratoire listes - solution
    • Les dictionnaires
      • Exercices
  • Différents types de traitements
    • Structures logiques séquentielle
    • Structures logiques conditionnelles (if/else/elif)
    • Structures logiques répétitives (boucles)
      • Exercices de base
      • Laboratoire boucles - solution
  • Modularisation
    • Création et appels des fonctions
    • La documentation des fonctions
    • Annotation de types dans les fonctions
    • Laboratoire - fonctions (niveau débutant)
    • Révision express fonctions
    • Les modules
      • Laboratoire
  • La portée des variables
  • Débogage
    • 🫂Le débogueur, c'est ton ami!
      • Introductions aux outils de débogage
      • Techniques de débogage
    • Les erreurs et exceptions
      • Introduction aux notions d’erreurs
      • Les exceptions et leurs gestion
      • Exercices de base - avec solutions
      • Laboratoire débogage et gestion des erreurs -solution
  • Tests unitaires
    • Tests unitaires
    • Exercice
  • Cryptographie
    • Introduction à la cryptographie
  • Les fichiers
    • Accès aux fichiers
  • Résolution de problèmes
    • Résolution de problèmes : exercice introductif
    • Étapes d'analyse et de résolution de problèmes
  • Activités avec Légos
    • Introduction à la programmation
    • Consolidation sur les fonctions avec des blocs
    • Pratiquer les boucles avec des blocs
  • Laboratoires
    • Simulation combat - dragon vs chevalier
    • Simulateur de bataille - Les anneaux du pouvoir
    • Jeu de cartes
    • Lien logique mathématique
      • Algèbre de Boole
    • Crypto variée
    • Après Noël
  • git - système de gestion de versions
    • Introduction à Git
    • Étapes de création des dépôts Git
  • Classes inversées
    • Résolution de problèmes, fonctions et traitements conditionnels
  • Examens
    • Examen 2 - 2023
    • Examen 3 - 2023
    • Examen 2 - 2024
  • Révision
    • Fonctions, gestion d'erreurs et tests unitaires
    • Résolution de problème
  • Trucs utiles
    • Check-list
Powered by GitBook
On this page
  • Introduction
  • Les exceptions
  • Gestion des exceptions
  • Syntaxe try/except
  • Syntaxe try/except/else/finally
  • Pratiques non conseillées
  1. Débogage
  2. Les erreurs et exceptions

Les exceptions et leurs gestion

PreviousIntroduction aux notions d’erreursNextExercices de base - avec solutions

Last updated 8 months ago

Introduction

Quelles sont les erreurs possibles dans le code suivant ?

nombre = int(input("Entrez un nombre:"))
resultat = 10 / nombre

Si on entre :

  • Une chaine de caractères (autre que des nombres), alors nous aurons l’erreur suivante :

  • Si nous entrons le chiffre 0, alors nous aurons l’erreur suivante :

  • 1 : le chemin (incluant le nom) du fichier dans lequel se trouve l'erreur.

  • 2 : le numéro de la ligne de code où se trouve l'erreur. La cause peut provenir d'une ligne précédente (comme dans l'exemple suivant).

  • 3 : La ligne de code où se trouve l'erreur.

  • 4 : Le type de l'exception et une brève description de l'erreur. Ici, les types d'exceptions dans les deux exemples sont ValueErroret ZeroDivisionError.

Pour éviter ces erreurs d’exécution, nous pouvons, dans certains cas, valider la valeur entrée à l’aide d’un if avant l’instruction dans laquelle il risque d’y avoir une erreur, ou d’utiliser la syntaxe try … except.

Les exceptions

Les erreurs détectées durant l'exécution sont appelées des exceptions. Dans les exemples d'erreurs précédents, les types d'exceptions sont ValueErroret ZeroDivisionError (voir point rouge 4 dans les images précédentes). Autres exemples :

  • TypeError

Signification du message d'erreur : On ne peut pas concaténer une chaîne de caractères (str) et un entier (int).

  • NameError

Signification du message d'erreur : la variable x n'est pas définie.

  • IndexError

Signification du message d'erreur : le numéro de l'indice déborde (l'élément à l'indice 6 n'existe pas dans la liste).

Pour tous les types d'exceptions, voir la documentation officielle de python suivante :

Documentation complète sur les exceptions :

Gestion des exceptions

Syntaxe try/except

try:
    # Instruction(s) contenant potentiellement une exception.
except <Type de l'exception>:
    # Instructions de gestion de l'exception.
  • Dans le bloc « try », on met le code que l’on veut gérer, donc susceptible de lever une exception.

  • Dans le bloc « except », on met le code à exécuter en cas d’exception. Il est possible de gérer plusieurs exceptions pour la(les) même(s) instruction(s).

Exemple :

Gestion des exceptions du code suivant :

nombre = int(input("Entrez un nombre:"))
resultat = 10 / nombre
  • Gestion de l'exception ZeroDivisionError : Le code suivant permet de détecter et gérer une exception de type ZeroDivisionError dans l’instruction resultat = 10 / nombre.

nombre = int(input("Entrez un nombre:"))

try:
    resultat = 10 / nombre

except ZeroDivisionError:

    print("La valeur entrée ne doit pas être 0!")
  • Gestion de l'exception ValueError : Le code suivant permet de détecter et gérer une exception de type ValueError dans l’instruction nombre = int(input("Entrez un nombre:")).

try:
    nombre = int(input("Entrez un nombre:"))
    
except ValueError:

    print("La valeur entrée n'est pas un nombre.")

resultat = 10 / nombre

Dans l'exemple précédent, si ça rentre dans le except ValueError, la variable nombre ne sera pas définie à la ligne 8 resultat = 10 / nombre, il va y avoir un autre type d'exception.

Lorsqu'une ligne de code dépend directement de la précédente, une solution possible serait de gérer plusieurs exceptions dans le même bloc.

try:
    nombre = int(input("Entrez un nombre:"))
    resultat = 10 / nombre
except ValueError :
    print("La valeur entrée doit être un nombre entier.")
except ZeroDivisionError:
    print("On ne peut pas diviser par 0.")

Syntaxe try/except/else/finally

try:
    nombre = int(input("Entrez un nombre:"))
    resultat = 10 / nombre
except ValueError:
    print("La valeur entrée n'est pas un nombre")
except ZeroDivisionError:
    print("La valeur entrée ne doit pas être 0!")
except:
    print("Une erreur est survenue")
else:
    print(resultat)
finally:
    print("Fin!")
  • Dans le bloc « try », on met le code que l’on veut gérer, donc susceptible de lever une exception.

  • Dans le bloc « except », on met le code à exécuter en cas d’exception. Il est possible de gérer plusieurs exceptions pour la(les) même(s) instruction(s).

  • Dans le bloc « else », on met le code à exécuter lorsqu’aucune exception ne survient.

  • Dans le bloc « finally » est exécuté peu importe ce qui arrive (qu’il y ait une erreur ou non).

Exemple :

try:
    nombre = int(input("Entrez un nombre:"))
    resultat = 10 / nombre
except ValueError:
    print("La valeur entrée n'est pas un nombre.")
except ZeroDivisionError:
    print("La valeur entrée ne doit pas être 0!")
except:
    print("Une erreur est survenue.")
else:
    print(resultat)
finally:
    print("Fin!")

Pratiques non conseillées

Gérer plusieurs types d'exceptions de la même façon :

try:
    nombre = int(input("Entrez un nombre:"))
    resultat = 10 / nombre
except (ValueError, ZeroDivisionError) :
    print("Une erreur a eu lieu.")

Il n'est pas obligatoire de mentionner le type d'exception dansexcept mais ceci est vivement déconseillé au risque de gérer à tort tous les types d'exceptions de la même façon.

try:
    nombre = int(input("Entrez un nombre:"))
    resultat = 10 / nombre
except :
    print("Une erreur a eu lieu.")

Exceptions nativesPython documentation
Logo
8. Erreurs et exceptionsPython documentation
Logo