Les exceptions

Formation

En Semi-présenciel Paris

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En semi-présentiel

  • Lieu

    Paris

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Les sites et dates disponibles

Lieu

Date de début

Paris ((75) Paris)
Voir plan
7 Cité Paradis, 75010

Date de début

Consulter

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

Si vous codez en Python, vous avez sûrement déjà été confronté(e) à des erreurs diverses, provenant de l'utilisateur, d'une bibliothèque, etc.
Par exemple, vous souhaitez que l'utilisateur entre un nombre et que votre programme affiche le triple de ce nombre.
Si vous utilisez input() , mais que l'utilisateur entre une chaîne de caractères (sans l'entourer de guillemets), le programme plante lamentablement.
Si vous utilisez raw_input() , vous n'avez pas de problème lors de la saisie, mais vous vous retrouvez avec une chaîne. Or, vous avez besoin d'un nombre.
Si vous utilisez int() pour transformer la chaîne obtenue en nombre, le programme plantera aussi dans le cas où l'utilisateur n'a pas entré un nombre.
Alors, comment remédier à un tel problème ?

Ce tutoriel va vous expliquer comment gérer les erreurs en Python.
Une première partie vous enseignera comment utiliser les mots-clé try , except , finally et else , tandis que la seconde vous présentera une liste des exceptions et des exemples les expliquant. Enfin, la troisième vous expliquera comment créer vos propres exceptions.

Les mots-clés try, except, else et finally

Quatre mots-clés vont servir à gérer les erreurs.

try permet « d'essayer » un bout de code. Si une erreur est rencontrée, on cesse d'interpréter le code et on passe aux except , qui permettent d'agir en fonction de l'erreur qui s'est produite. C'est pourquoi try doit toujours être suivi d'au moins un except ou d'un finally .
Nous allons, pour comprendre leur fonctionnement, analyser le code suivant.

try: fichier = open("foo.txt", "r") print int("abc") except IOError: print "Erreur lors de l'ouverture du fichier !" except ValueError: print "Erreur lors de la conversion !"

Les deux premières lignes, dans le try: , sont tout d'abord interprétées. La première tente d'ouvrir un fichier appelé foo.txt. Si ce fichier existe dans le répertoire du script, remplacez "foo.txt" par autre chose, de sorte que le fichier que le script tente d'ouvrir n'existe pas.
La seconde essaie d'afficher à l'écran la chaîne "abc" convertie en nombre.
La troisième ligne, qui contient le mot-clé except , est exécutée en cas d'IOError . IOError est l'exception lancée lorsqu'il s'avère impossible d'ouvrir un fichier (entre autres). Dans ce cas, on affiche une erreur. La cinquième ligne agit comme la troisième, en cas de ValueError , qui est lancé quand on passe un argument avec le bon type (ici, "abc" est bien une chaîne), mais que la valeur n'est pas correcte ("abc" ne saurait être transformée en nombre, vous en conviendrez).
Lorsque nous lançons ce code, comme foo.txt n'existe pas, l'ouverture du fichier provoque une IOError . Si nous le créons (touch foo.txt sous UNIX), alors la ligne print int("abc") sera interprétée et lancera une ValueError . Si, enfin, nous remplaçons "abc" par "22" (ou toute autre chaîne qui peut être convertie en nombre), alors aucune exception ne sera lancée et seul le bloc try: aura été exécuté.

On peut également mettre un tuple d'exceptions, pour les cas où le même code doit être interprété pour des erreurs différentes :

except (IOError, ValueError):

Il est possible de créer une instance de l'exception, afin d'avoir plus d'informations sur une erreur :

try: fichier = open('foo.txt') except IOError, e: print e [Errno 2] No such file or directory: 'foo.txt'

Il ne faut pas utiliser except: tout seul, car des exceptions comme celles lancées lorsque l'utilisateur tente de quitter risquent d'être interceptées, et donc d'empêcher celui-ci d'y parvenir. Si vous voulez intercepter toutes les exceptions possibles, utilisez Exception .

Le mot-clé else permet d'interpréter du code lorsqu'aucune exception n'a été lancée dans le try: . Ainsi, on pourrait rajouter une lecture du fichier dans le code précédent :

try: fichier = open("foo.txt", "r") print int("22") except IOError: print "Erreur lors de l'ouverture du fichier !" except ValueError: print "Erreur lors de la conversion !" else: print fichier.read()

Ainsi, si le fichier s'est ouvert sans problème, et le reste du code (ici symbolisé par le int("22") ) aussi, le fichier sera lu.

else est néanmoins peu utilisé, car il est bien plus pratique de mettre le code dans le try , comme ceci :

try: fichier = open("foo.txt", "r") print int("22") print fichier.read() except IOError: print "Erreur lors de l'ouerture du fichier !" except ValueError: print 'Erreur lors de la conversion !"

Enfin, le mot-clé finally permet d'exécuter du code après l'ensemble try: except: , quoi qu'il arrive (qu'une exception ait été lancée ou non, qu'un return ou un break soit rencontré, le bloc finally: sera interprété).

Liste des exceptions built-in

Cette partie propose une liste des exceptions built-in en Python, accompagnées pour la plupart d'un exemple.
Certaines exceptions en contiennent d'autres : par exemple, Exception regroupe toutes les exceptions, exceptés KeyboardInterrupt , SystemExit , et bien sûr, BaseException , qui regroupe l'ensemble des exceptions. La hiérarchie est la suivante :

  • BaseException

    • SystemExit

    • KeyboardInterrupt

    • Exception

      • GeneratorExit

      • StopIteration

      • StandardError

        • ArithmeticError

          • FloatingPointError

          • OverflowError

          • ZeroDivisionError

        • AssertionError

        • AttributeError

        • EnvironmentError

          • IOError

          • OSError

            • VMSError

          • EOFError

          • ImportError

          • LookupError

            • IndexError

            • KeyError

          • MemoryError

          • NameError

            • UnboundLocalError

          • ReferenceError

          • RuntimeError

            • NotImplementedError

          • SyntaxError

            • IndentationError

              • TabError

          • SystemError

          • TypeError

          • ValueError

            • UnicodeError

              • UnicodeDecodeError

              • UnicodeEncodeError

              • UnicodeTranslateError

      • Warning

        • DeprecationWarning

        • PendingDeprecationWarning

        • RuntimeWarning

        • SyntaxWarning

        • UserWarning

        • FutureWarning

        • ImportWarning

        • UnicodeWarning

  • BaseException regroupe l'ensemble des exceptions built-in. Les exceptions définies par l'utilisateur (comme nous allons apprendre à le faire) ne doivent pas en hériter directement, mais hériter d'Exception .

  • SystemExit est l'exception lancée par sys.exit() . Si elle n'est pas interceptée par un except: , le programme s'arrête. Elle n'hérite pas d'Exception pour que, lorsque le développeur cherche à intercepter toutes les erreurs possibles, il n'empêche pas le programme de quitter.

  • KeyboardInterrupt est lancé lorsque l'utilisateur appuie sur les touches d'interruption (généralement Ctrl + C). Tout comme SystemExit, il hérite directement de BaseException , pour les mêmes raisons.

  • Exception regroupe toutes les exceptions qui ne se rapportent pas à la fermeture du programme. Vos propres exceptions doivent en dériver. On l'utilise généralement pour s'assurer que tout a bien fonctionné, et dans le cas contraire, pour intercepter puis afficher l'erreur qui s'est produite :

    try: # code except Exception, e: print "Erreur : %s", % e
  • GeneratorExit est lancé lorsqu'on utilise la méthode close() d'un générateur. Pour en savoir plus sur les générateurs, je vous conseille le tutoriel de Natim sur les pratiques avancées et méconnues en Python, qui fournit notamment un exemple d'utilisation de cette exception.

  • StopIteration est, lui aussi, lié aux générateurs. Le tutoriel précédemment cité en parle également.

  • StandardError regroupe toutes les exceptions, sauf les Warnings, GeneratorExit et StopIteration puisqu'il ne s'agit pas d'erreurs à proprement parler.

  • ArithmeticError est la classe de base pour les erreurs d'arithmétique.

  • FloatingPointError est lancé lorsqu'une erreur est détectée dans une opération à virgule flottante.

  • OverflowError est lancé lorsque le résultat d'une opération est trop grand pour être représenté.

  • ZeroDivisionError est l'exception lancée lorsque le programme tente de faire une division (ou un modulo) par zéro.

    try: print 5/0 except ZeroDivisionError, e: print e try: print 5%0 except ZeroDivisionError, e: print e integer division or modulo by zero integer division or modulo by zero
  • AssertionError est lancé lorsqu'un assert n'est pas vrai.

    try: assert 1 == 0 except AssertionError: print "Erreur !" Erreur !
  • AttributeError est lancé lorsqu'une erreur se produit lors d'une référence ou d'un assignement à un attribut.

    class Foo: pass foo = Foo() try: print foo.bar except AttributeError, e: print e Foo instance has no attribute 'bar'
  • EnvironmentError est la classe de base des exceptions qui ne proviennent pas de Python (par exemple, un fichier introuvable).

  • IOError est une exception lancée lorsqu'une erreur I/O (pour Input/Output) se produit. Trois attributs sont intéressants : errno , qui indique le numéro de l'erreur ; filename , qui donne le nom du fichier concerné ; et strerror qui donne une description de l'erreur.

    try: fichier = open("foo.txt", "r") except...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Les exceptions

Prix sur demande