English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base Python

Contrôle des flux Python

Fonctions en Python

Types de données en Python

Opérations sur les fichiers Python

Objets et classes Python

Dates et heures Python

Connaissances avancées en Python

Manuel de référence Python

Traitement des exceptions en Python - Try, Except et Finally

Dans cet article, vous découvrirez comment utiliser les instructions try, except et finally pour traiter les exceptions dans un programme Python. Cela vous inspirera à écrire du code propre, lisible et efficace en Python.

Qu'est-ce qu'une exception en Python?

Python en a beaucoupExceptions intégrées  Lorsque certains erreurs se produisent, elles forcent votre programme à afficher des erreurs.

Lorsque ces exceptions se produisent, elles entraînent l'arrêt du processus actuel et sont transmises au processus d'appel jusqu'à ce qu'elles soient traitées. Si elles ne sont pas traitées, notre programme s'effondrera.

Par exemple, si la fonction A appelle la fonction B, et que cette dernière appelle à son tour la fonction C, et qu'une exception se produit dans la fonction C. Si l'exception n'est pas traitée dans C, elle sera transmise à B, puis à A.

Si vous ne traitez pas, une erreur sera lancée et notre programme s'arrêtera soudainement et inattendument.

En Python, capturer les exceptions

En Python, vous pouvez utiliser une instruction try pour traiter les exceptions.

Les opérations susceptibles de provoquer des exceptions sont placées dans une clause try, et le code de traitement des exceptions est écrit dans une clause except.

Après avoir capturé l'exception, les opérations que nous allons exécuter dépendent de nous-mêmes. C'est un exemple simple.

# Importer le module sys pour obtenir le type d'exception
import sys
randomList = ['a', 0, 2]
for entry in randomList:
    try:
        print("L'entrée est", entry)
        r = 1/int(entry)
        break
    except:
        print("Oops!", sys.exc_info()[0], "s'est produite.")
        print("Prochain entrée.")
        print()
print("Le réciproque de", entry, "est", r)

Résultat de la sortie

L'entrée est a
Oops! <class 'ValueError'> s'est produite.
Prochain entrée.
L'entrée est 0
Oops! <class 'ZeroDivisionError'> s'est produite.
Prochain entrée.
L'entrée est 2
Le réciproque de 2 est 0.5

Dans ce programme, nous exécutons en boucle jusqu'à ce que l'utilisateur entre un entier avec un réciproque valide. La partie susceptible de provoquer une exception est placée dans le bloc try.

Si aucune exception n'advient, le contenu à l'extérieur de la boucle except est sauté et le flux normal continue. Cependant, si une exception se produit, elle sera capturée par le bloc except.

Ici, nous utilisons la fonction exinfo() du module sys pour afficher le nom de l'exception et demander à l'utilisateur de réessayer. Nous pouvons voir la valeur ‘a’ et ‘1.3‘0’ entraînera ValueError, et ‘0’ entraînera ZeroDivisionError.

Capturer des exceptions spécifiques en Python

Dans l'exemple précédent, nous n'avons mentionné aucune exception dans la clause except.

Ce n'est pas une bonne habitude de programmation, car cela capturera toutes les exceptions et traitera chaque cas de la même manière. Nous pouvons spécifier quels types d'exceptions une clause except capturera.

Une clause try peut avoir un nombre illimité de clauses except pour les traiter de différentes manières, mais seule une clause except est exécutée lors de l'occurrence d'une exception.

Nous pouvons utiliser un tuple de valeurs pour spécifier plusieurs exceptions dans une clause except. Voici un exemple de pseudo-code.

try:
   Exécuter certains codes
   pass
except ValueError:
   Gérer l'exception ValueError
   pass
except (TypeError, ZeroDivisionError):
   Gérer plusieurs exceptions
   Exception TypeError et ZeroDivisionError
   pass
except:
   # Handle all other exceptions
   pass

Throw an exception

In Python programming, exceptions are thrown when corresponding errors occur at runtime, but we can use the keyword raise to force an exception to be thrown.

We can also choose to pass a value to the exception to clarify why the exception was raised.

>>> raise KeyboardInterrupt
Traceback (most recent call last):
...
KeyboardInterrupt
>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument
>>> try:
...        a = int(input("Enter a positive integer: "))
...        if a <= 0:
...        raise ValueError("This is not a positive number!")
...    except ValueError as ve:
...    print(ve)
...    
Enter a positive integer: -2
This is not a positive number!

try...finally

In Python, the try statement can have an optional finally clause. This clause will be executed in any case, and it is usually used to release external resources.

For example, we can connect to a remote data center via network connection, or use files or use a graphical user interface (GUI).

In all these cases, whether the resource is successful or not, we must clear the resource. These operations (closing files, GUI, or disconnecting from the network) are executed in the finally clause to ensure execution.

This isFile operationsThis example illustrates this point.

try:
   f = open("test.txt", encoding = 'utf-8)
   # Execute file operations
finally:
   f.close()

This type of construction ensures that the file is closed even if an exception occurs.