0% ont trouvé ce document utile (0 vote)
48 vues30 pages

Gestion des exceptions en Python

Ce document traite de la gestion des exceptions en Python, expliquant comment utiliser les blocs try et except pour rattraper les erreurs et éviter l'arrêt du programme. Il aborde également la création et la gestion de bases de données avec SQLite, y compris la création de tables, l'insertion et la récupération de données, ainsi que la gestion des erreurs lors des opérations sur la base de données. Des exemples de code illustrent les concepts présentés, facilitant la compréhension des mécanismes de gestion des exceptions et de la persistance des données.

Transféré par

Happy life
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
48 vues30 pages

Gestion des exceptions en Python

Ce document traite de la gestion des exceptions en Python, expliquant comment utiliser les blocs try et except pour rattraper les erreurs et éviter l'arrêt du programme. Il aborde également la création et la gestion de bases de données avec SQLite, y compris la création de tables, l'insertion et la récupération de données, ainsi que la gestion des erreurs lors des opérations sur la base de données. Des exemples de code illustrent les concepts présentés, facilitant la compréhension des mécanismes de gestion des exceptions et de la persistance des données.

Transféré par

Happy life
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Institut Supérieur d’Informatique de Mahdia

Programmation Avancée en Python

Mme. Amal Gassara

Auditoire: LCS - GLSI

Année universitaire: 2024/2025


Chapitre 3
Persistance des données
Gestion des exceptions

 Définition d’une exception


 Une exception est un objet qui indique que le programme ne peut pas
continuer son exécution.
 Exemple: Ci-dessous le code de la fonction division

def division(x,y):
resultat=x/y
print (resultat)
print("Division terminée")
#Programme Principal
division(1,0)

 Lorsque x == 0, le programme effectue une division par zéro. Alors, il


s’arrête et déclenche une erreur.
 L’instruction print("Division terminée") n’était pas exécutée

3
Gestion des exceptions

 Principe des exceptions


 La gestion des exceptions est un concept très utilisé dans d'autres langages de
programmation (orientés objet) comme Java, PHP , etc
 Le mécanisme des exceptions permet au programme de « rattraper » les
erreurs, de détecter qu’une erreur s’est produite et d’agir en conséquence afin
que le programme ne s’arrête pas.

 Afin de rattraper l’erreur, on place le code qui peut générer une erreur
éventuelle dans le bloc try et on prévoie un traitement alternatif dans le
bloc except.

4
Gestion des exceptions

 Syntaxe:
try: #La clause try
<instructions_ susceptible_de_produire_une_erreur>
except <type_exception> : #La clause except
<instruction_à_exécuter_si_une_exception_se_déclenche>

 La clause try est exécutée au début.


 Si le bloc try ne génère aucune erreur, alors le bloc except sera ignoré.
 Sinon, le bloc except sera exécuté pour rattraper l'erreur du bloc try. Le reste
de ce dernier (le bloc try) est ignoré.
 Si le type d'exception levée correspond à un nom indiqué après l’instruction
except, la clause except correspondante est exécutée. Puis l'exécution du
programme continue après l'instruction try.

5
Gestion des exceptions

 Alors, on va modifier le code de la fonction division de manière qu’elle


rattrape l’erreur comme suit :

def division(x,y):
try:#La clause de try
resultat=x/y
print (resultat)

except ZeroDivisionError:#La clause except


print ("Attention division par zero!")

print("Division terminée")

#Programme Principal
division(1,0)

6
Gestion des exceptions

 Exemple 2
def division(x,y):
try:
return x/y
except TypeError:
print("Attention type de variable erroné")

#Programme Principal
division(1,"2")
Attention type de variable erroné
division(1,0)
File "<pyshell#24>", line 3, in division return x/y
ZeroDivisionError: division by zero

 Si le type de l’exception déclenchée ne correspond à aucune exception


mentionnée dans la clause except, l'exécution s'arrête avec un message.
7
Gestion des exceptions

 Exemple 3
 On peut la corriger de cette manière:
def division(x,y):
try:
return x/y
except ZeroDivisionError:
print("Attention division par zero!")
except TypeError:
print("Attention type de variable erroné")
except Exception:
print("Attention une erreur s’est produite")
#Programme Principal
division(1,0)
Attention division par zero
division(1,"2")
Attention type de variable erroné
division(1,0,3)
Attention une erreur s’est produite
8
Gestion des exceptions

 Une liste des exceptions natives et leur signification se trouve dans le lien
suivant:
https://docs.python.org/fr/3/library/exceptions.html#bltin-exceptions
Exemples:
 TypeError
 NameError
 SyntaxError

9
Gestion des exceptions

 Finally
 On utilise le mot clé finally pour exécuter des instructions quelque soit
les erreurs générées ou non (et même si il y a présence d'un return ).
Dans tous les cas les instructions placées dans finally seront exécutées.

10
Gestion des exceptions

 Exemple d’utilisation de else:

def division(x,y): def division(x,y):


try: try:
result= x/y result= x/y
except ZeroDivisionError: except ZeroDivisionError:
print("Attention division par zero!") print("Attention division par zero!")
print(result) else :
print(result)
#Programme Principal
division(1,1) #Programme Principal
1.1 division(1,1)
Division (1,0) 1.1
Division (1,0)
Attention division par zero!
UnboundLocalError: local variable 'result' Attention division par zero!
referenced before assignment

11
Gestion des exceptions

 Exemple avec else et finally:


def division(x,y): def division(x,y):
try: try:
result= x/y result= x/y
except ZeroDivisionError: except ZeroDivisionError:
print("Attention division par zero!") print("Attention division par zero!")
else : else :
print(result) print(result)
print("Fin Programme") finally:
print("Fin Programme")
#Programme Principal
division(1,0) #Programme Principal
Attention division par zero! division(1,0)
Fin Programme Attention division par zero!
Fin Programme
division ("3", 2) Division ("3", 2)
TypeError: unsupported operand Fin Programme
type(s) for /: 'str' and 'int' TypeError: unsupported operand
type(s) for /: 'str' and 'int' 12
Lever des exceptions manuellement

 Si on souhaite appliquer une règle spécifique à notre programme pour


interdire un certain fonctionnement.
 Exemple: un programme qui vérifie le mot de passe d’un utilisateur, si elle
est incorrect, une exception est déclenchée

mot_de_passe = input("C'est quoi le mot de passe ?")


if mot_de_passe != "1234":
raise Exception("Intrus !")
else:
print("Bienvenue !")

 Grâce au mot clé raise, nous avons manuellement levé une exception

13
Lever des exceptions manuellement

 Rattraper l’exception

try:
mot_de_passe = input("C'est quoi le mot de passe ?")
if mot_de_passe != "1234":
raise Exception("Intrus !")
else:
print("Bienvenue !")
except Exception as e:
print("Accès refusé :", e)

C'est quoi le mot de passe ?1234


Bienvenue !

C'est quoi le mot de passe ?12


Accès refusé : Intrus !

14
Lever des exceptions manuellement

 Exercice: Fonction contrôlant le type des paramètres

Écrivez la fonction dire_bonjour(nom) qui affiche sur la console « Bonjour »


suivi du nom passé en paramètre.
Complétez la fonction ci-dessous pour que l’appel échoue avec une
exception si le paramètre nom n’est pas une chaîne de caractères ou si la
chaîne de caractères est vide

def dire_bonjour(nom):
# TODO
print("Bonjour", nom)

15
Lever des exceptions manuellement

def dire_bonjour(nom):

try:
if not isinstance(nom, str) or nom == "": #ou type(nom) != str
raise ValueError("'nom' doit être de type str non vide")
print("Bonjour", nom)

except ValueError as e:
print("Erreur :", e)

dire_bonjour("Alice")# Affiche : Bonjour Alice


dire_bonjour(123) # Affiche : Erreur : 'nom' doit être de type
str non vide.
dire_bonjour("") # Affiche : Erreur : 'nom' doit être de type
str non vide.

16
Lever des exceptions manuellement

def dire_bonjour(nom):
if not isinstance(nom, str) or nom == "":
raise ValueError("'nom' doit être de type str non vide")

print("Bonjour", nom)

try:
dire_bonjour("Alice") # Affiche: Bonjour Alice
dire_bonjour(123) # Lève une exception
dire_bonjour("") # Lève une exception

except ValueError as e:
print("Erreur :", e)

17
Gestion de la base
des données
Introduction

 Deux modes de stockage des données sont envisageables :


 Des fichiers

 Une base de données

  Le mode de stockage dans des fichiers est très simple à mettre en


œuvre.

  Si les informations à traiter atteignent un certain volume, l'usage d'une


base de données est fortement recommandé.
Gestion de la base des données

 Qu’est ce qu’une base de données


 Une base de données est un conteneur dans lequel il est possible de stocker des
données de façon structurée.

 Un langage standardisé -SQL- est dédié à cette structure et permet aussi bien
de faire des recherches mais aussi des modifications ou des suppressions.

 Parmi les logiciels de gestion de bases de données utilisées, on trouve les


SGBDR - Système de gestion de base de données relationnelles –

 Exemples: MySQL, PostgreSQL, MariaDB, SQLite, Oracle

20
Gestion de la base des données

 Quels sont les SGBDR les plus connus?

PostgreSQL PostgreSQL est la base de données à utiliser pour les gros projets. Stable et très
puissant, il permet de gérer des Gigabytes de données sans problème.
MySQL Mysql est l'un des SGBDR les plus utilisés au monde. Il est gratuit, libre et très
puissant Il répond à une logique client/serveur , c'est à dire que plusieurs clients
(ordinateurs distants) peuvent se connecter sur un seul serveur qui héberge les
données.
MariaDB Le créateur de MySQL a crée MariaDB suite au rachat de MySQL pour continuer le
projet en open source.
SQLite SQLite est une bibliothèque écrite en C . SQLite est parfait pour les petits projets. Sa
particularité est d'être intégré directement à un programme et ne répond donc pas
à la logique client-serveur.
Il peut être intégré à des projets tournant sur de petites supports comme les
smartphones.

Oracle Oracle Database est sous licence propriétaire, c'est à dire payant. Il est souvent
utilisé pour les projets à gros budget nécessitant de réaliser des actions complexes.

21
SQLite

Utiliser le module SQLite


 Instructions de base sous python
 Pour importer le module SQLite:
import sqlite3 as sq

 Pour créer et se connecter à une base de données avec SQLite:


connection = sq.connect('ma_base.db')
 Les bases créées avec sqlite3 sont enregistrées sous forme de fichier .db. Ce
fichier s’ouvre en créant un objet de type Connection.
 Pour exécuter des commandes:

cursor = connection.cursor()
requete= ("SELECT * FROM Vente")
cursor.execute(requete)

22
SQLite

 Un curseur est ensuite crée à partir de l’objet connection de la classe


Connection. Ce curseur représente un canal entre la base de données et le
script Python.
 Pour exécuter des commandes dans la base, on crée des requetés sql sous
forme de chaines de caractères. Ensuite, on les exécute avec la fonction
execute()
 Lorsque le travail prévu est terminé, il est nécessaire d’enregistrer les
modifications faites sur la base avec la méthode commit()

 Enfin, il faut fermer la connexion vers la base


 Pour fermer la connexion:

connection.close()

23
SQLite

 Créer une table avec SQLite


 Voici un exemple de création de table:
cursor = connection.cursor()
cursor.execute(""" CREATE TABLE users(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT, age INTERGER)""")
connection.commit()

 On utiliser primary key pour indiquer la clé primaire


 On utilise autoincrement, si la clé primaire s’incrémente automatiquement,
elle n’est pas donnée par l’utilisateur.
 On utilise foreign key pour indiquer une clé étrangère

cursor.execute(""" CREATE TABLE users(id integer PRIMARY KEY, idArticle integer, name
TEXT, age INTERGER, foreign key (idArtcile) references Artcile(idArtcile))""")

24
SQLite

 Supprimer une table avec SQLite


 Voici un exemple de suppression d’une table:

cursor = connection.cursor()
cursor.execute("DROP TABLE users")
connection.commit()

25
SQLite

 Insérer des données


Il existe plusieurs manière d'insérer des données,
 La plus simple étant celle-ci:

cursor.execute("INSERT INTO users (name, age) VALUES ("olivier", 30) ")


connection.commit()

 Ou encore:
X="Olivier"
Y=30
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?) ", (x,y) )
connection.commit()

 En passant par un dictionnaire

data = {"nom" : "olivier", "age" : 30}


cursor.execute("INSERT INTO users(name, age) VALUES(:nom, :age)", data)
connection.commit()
26
SQLite

 Il est également possible de faire plusieurs insert en une seule fois avec la
fonction executemany :

users = []
users.append(("olivier", 30))
users.append(("jean-louis", 90))

#ou bien users=[ ("olivier", 30) , ("jean-louis", 90) ]

cursor.executemany("INSERT INTO users(name, age) VALUES(?, ?)", users)

27
SQLite

 Récupérer des données


 La requête SELECT demande l’extraction d’un ensemble particulier
d’enregistrement, qui devront être transférés de la base de données au curseur.
 Récupérer une seule ligne: On peut récupérer la première ligne correspondant
à une recherche à l'aide de la fonction fetchone()

cursor.execute("SELECT * FROM users") Le résultat est un tuple:


user1 = cursor.fetchone() (1, 'olivier', 30)
print(user1)

 Récupérer plusieurs lignes: On peut récupérer plusieurs données de la même


recherche en utilisant la fonction fetchall()
 1ère méthode
cursor.execute("SELECT id, name, age FROM users")
rows = cursor.fetchall() Le résultat est une liste de tuples:
print(rows) [(1, 'olivier', 30) , (2, ' jean-louis ', 90)]
for row in rows:
(1, 'olivier', 30)
print(row) 28
(2, ' jean-louis ', 90)
SQLite

 2ème méthode (sans utiliser fetchall()


 L'objet curseur fonctionne comme un itérateur, invoquant la méthode
fetchall() automatiquement:
cursor.execute("SELECT id, name, age FROM users") Le résultat est une liste de tuples:
for row in cursor: (1, 'olivier', 30)
print(row) (2, ' jean-louis ', 90)

 Pour la recherche spécifique, on utilise la même logique vu précédemment:

id = 2
cursor.execute("SELECT id, name FROM users WHERE id=?", (id, ))
response = cursor.fetchone()
print(response)

 Modifier des entrées


 Pour modifier des entrées:
age=31
cursor.execute("UPDATE users SET age = ? WHERE id = 2", (age, ))
29
connection.commit()
SQLite

 Gestion des exceptions


 Il est recommandé de toujours encadrer les opérations sur des bases de
données et d'anticiper des erreurs:
import sqlite3
try:
connnection = sqlite3.connect('users.db')
cursor = connection.cursor()
cursor.execute("create TABLE users ( id integer primary key , name TEXT, age integer)")
connection.commit()

except sqlite3.DatabaseError as e:
print("Erreur", e)

finally:
connection.close()

Vous aimerez peut-être aussi