Introduction à la Programmation Python
Mme. Amal Gassara
Institut Supérieur d’Informatique de Mahdia
Année universitaire: 2022/2023
Chapitre 4:
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")
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)
print("On est dans le bloc try")
except ZeroDivisionError:#La clause except
print ("Attention division par zero!")
print("Division terminée")
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é")
>>> division(1,"2")
Attention type de variable erroné
>>> division(1,0)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
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")
>>> 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:
[Link]
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 executées.
10
Gestion des exceptions
Exemple:
11
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.
Les logiciels de gestion de bases de données les plus utilisées aujourd'hui sont
des SGBDR - Système de gestion de base de données relationnelles –
Exemples: MySQL, PostgreSQL, MariaDB, SQLite, Oracle
14
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:
con = [Link]('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 = [Link]()
requete= ("SELECT * FROM Vente")
[Link](requete)
15
SQLite
Un curseur est ensuite crée à partir de l’objet con 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()
Pour fermer la connexion:
[Link]()
Enfin, il faut fermer la connexion vers la base
16
SQLite
Créer une table avec SQLite
Voici un exemple de création de table:
cursor = [Link]()
[Link](""" CREATE TABLE users(
id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT,
age INTERGER)""")
[Link]()
Supprimer une table avec SQLite:
cursor = [Link]()
[Link]("DROP TABLE users")
[Link]()
17
SQLite
Insérer des données
Il existe plusieurs manière d'insérer des données,
La plus simple étant celle-ci:
[Link]("INSERT INTO users (name, age) VALUES ("olivier", 30) ")
[Link]()
Ou encore:
X=“Olivier”
Y=“30
[Link]("INSERT INTO users (name, age) VALUES (?, ?) ", (x,y) )
[Link]()
En passant par un dictionnaire
data = {"nom" : "olivier", "age" : 30}
[Link]("INSERT INTO users(name, age) VALUES(:nom, :age)", data)
[Link]()
18
SQLite
Il est également possible de faire plusieurs insert en une seule fois avec la
fonction executemany :
users = [("olivier", 30), ("jean-louis", 90)]
[Link]("INSERT INTO users(name, age) VALUES(?, ?)", users)
19
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.
On peut récupérer la première ligne correspondant à une recherche à l'aide de
la fonction fetchone()
[Link]("SELECT * FROM users") Le résultat est un tuple:
user1 = [Link]() (1, 'olivier', 30)
print(user1)
On peut récupérer plusieurs données de la même recherche en utilisant la
fonction fetchall()
1ère méthode
[Link]("SELECT id, name, age FROM users") Le résultat est une liste de tuples:
rows = [Link]() (1, 'olivier', 30)
for row in rows: (2, ' jean-louis ', 90)
print(row)
20
SQLite
2ème méthode
L'objet curseur fonctionne comme un itérateur, invoquant la méthode
fetchall() automatiquement:
[Link]("SELECT id, name, age FROM users")
for row in cursor:
print(row)
Pour la recherche spécifique, on utilise la même logique vu précédemment:
id = 2
[Link]("SELECT id, name FROM users WHERE id=?", (id, ))
response = [Link]()
Modifier des entrées
Pour modifier des entrées:
[Link]("UPDATE users SET age = ? WHERE id = 2", (31, ))
[Link]()
21
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:
conn = [Link]('data/[Link]')
cursor = [Link]()
[Link]("""CREATE TABLE users
( id INTEGER PRIMARY KEY AUTOINCREMENT , name TEXT, age INTERGER)""")
[Link]()
except [Link]:
print("Erreur la base n’existe pas")
except [Link] as e:
print("Erreur")
finally:
[Link]()
Les fichiers
Les fichiers
Un fichier est un ensemble de données numériques réunies sous un même nom,
enregistrées sur un support de stockage permanent (un disque dur, un CD-
ROM,…)
Les fichiers textes
Un fichier texte est un fichier où l’information est stockée sous forme de
caractères lisibles par un éditeur de texte (principalement des lettres et des
chiffres)
Les fichiers « .txt »: Un fichier texte qui contient des caractères organisés en
lignes successives. Ces lignes étant séparées les unes des autres par un
caractère spécial non-imprimable appelé « marqueur de fin de ligne
Les fichiers « .csv » : un fichier texte représentant des données tabulaires
sous forme de valeurs séparées par des virgules (ou ‘\t’). Chaque ligne du
texte correspond à une ligne du tableau et les virgules correspondent aux
séparations entre les colonnes
Il est très facile de traiter ce genre de fichiers sous Python.
Les fichiers
Ouverture d’un fichier texte
La fonction open() permet d’ouvrir un fichier.
Elle prend en paramètres :
le chemin du fichier (relatif ou absolu)
Un chemin relatif est un chemin qui prend en compte l'emplacement
de lecture.
Un chemin absolu est un chemin complet qui peut être lu quelque soit
l'emplacement de lecture.
mode d’accès:
"r": ouverture en mode read, le fichier doit exister, sinon un message
d’erreur est retourné;
"w": ouverture en mode write, si le fichier existe, il l’ouvre, écrase le
contenu et positionne le curseur au début, sinon le fichier sera créé ;
"a": ouverture en mode append, le contenu du fichier ne sera pas
écrasé et le nouveau contenu s’ajoute dans le fichier s’il existe, sinon il
sera créé ;
Les fichiers
>>> fichier = open("[Link]", "r")
>>> print (fichier)
<open file '[Link]', mode 'r' at 0x7ff6cf3fe4b0>
La fonction open() renvoie un «objet-fichier» de type file
Fermeture d’un fichier texte
Comme tout élément ouvert, il faut le refermer une fois les instructions
terminées. Pour cela on utilise la méthode close()
>>> [Link]()
Les fichiers
Lecture d’un fichier texte
Méthodes Description
read() Lire le contenu du fichier texte ouvert et renvoie une
chaîne de caractères unique. Il est possible de lire :
readline() Lire une seule ligne du fichier ouvert et la renvoie sous
forme d'une chaîne de caractères.
readlines() Retourner une liste contenant toutes les lignes du
fichier texte ouvert.
Les fichiers
1. La méthode read()
Exemple:
>>> fr=open('[Link]','r') # ouvrir le fichier en lecture
>>> contenu=[Link]() #Après, le curseur est placé à la fin du texte
>>> contenu
poisson
abeille
chat
chien
Oiseau
mouton
>>> ch=[Link]() #Un autre appel à [Link]()renvoie la chaîne vide
>>> ch
''
>>> [Link]()
Les fichiers
2. La méthode readline()
Elle renvoie une chaîne correspondante à la ligne courante et passe le curseur,
initialement placé au début du fichier, dans la ligne suivante.
>>> fr=open('[Link]','r')
>>> ligne=[Link]()
>>> while ligne !="":
print(ligne)
ligne=[Link]()
>>> [Link]()
3. La méthode readlines() : Elle récupère toutes les lignes d’un fichier dans une
liste
>>> fr=open('[Link]','r')
>>> contenu=[Link]()
>>> contenu
['poisson\n','abeille\n','chat\n','chien\n','oiseau\n','mouton\n']
>>> for ligne in contenu :
print(ligne)
>>> [Link]()
Les fichiers
Ecriture dans un fichier texte
1. La méthode write()
• La méthode write() permet d’écrire des données dans le fichier.
— Les données sont de type chaîne de caractères.
— Les données sont enregistrées dans le fichier les unes à la suite des autres
(séquentiel) sans espaces ni saut de lignes.
Il faut ajouter le séparateur "\n" afin d’ajouter le retour à la ligne ou le
séparateur "\t" qui permet d’insérer une espace de tabulation
Les fichiers
Exemple1:
>>> # créer un nouveau fichier
>>> fich1 = open('[Link]', 'w')
>>> # y écrire un texte
>>> animaux = ['poisson','abeille','chat']
>>> for i in animaux:
[Link](i+'\n')
>>> # le fermer pour valider son contenu
>>> [Link]()
Exemple2:
>>> # ouvrir un fichier existant et le modifier
>>> fich2 = open('[Link]', 'a')
>>> # y ajouter un texte puis le fermer
>>> [Link]("chien \n")
>>> [Link]()
Les fichiers
Ecriture dans un fichier texte
2. La méthode writelines()
• La méthode writelines() permet d’écrire le contenu d’une liste dans un fichier
texte.
>>> animaux2=['oiseau\n','mouton\n']
>>> fich3=open('[Link]','a')
>>> [Link](animaux2)
>>> [Link]()
Les fichiers
Gestion des exceptions
Dans l'exemple suivant, nous ouvrirons manuellement un fichier et le
fermerons manuellement une fois que nous en aurons lu le contenu.
f = open('filename', 'w')
try:
# traitement sur le fichier
[Link]('Bonjour')
finally:
[Link]()
On a utilisé le bloc try et finally, pour s’assurer de fermer le fichier même si
une exception est parvenue lors du traitement sur le fichier.
Si on fait cette opération d’écriture dans le fichier souvent, alors il serait très
utile que l'utilisateur dispose d'un mécanisme pour le faire automatiquement.