Saisie → Validation → Try/Except → Gestion → Correction
Gestion des conversions : Technique permettant de capturer les erreurs lors de la conversion d'une chaîne en un autre type.
- Encapsuler le code sensible dans un bloc try
- Capturer l'exception spécifique (ValueError)
- Proposer un message d'erreur clair
- Demander une nouvelle saisie si nécessaire
- ValueError : Chaîne incorrecte pour conversion
- TypeError : Type incompatible
- OverflowError : Valeur trop grande
- Format incorrect
try:
nombre = int(input("Entrez un nombre : "))
except ValueError:
print("Erreur : Veuillez entrer un nombre valide")
while True:
try:
nombre = int(input("Entrez un nombre : "))
break # Sortir de la boucle si succès
except ValueError:
print("Erreur : Veuillez entrer un nombre valide")
def saisir_nombre():
while True:
try:
return int(input("Entrez un nombre : "))
except ValueError:
print("Erreur : Veuillez entrer un nombre entier valide")
def saisir_nombre():
while True:
try:
nombre = int(input("Entrez un nombre entier : "))
return nombre
except ValueError:
print("Erreur : Ce n'est pas un nombre entier valide.")
print("Veuillez réessayer.")
# Exemple d'utilisation
nombre = saisir_nombre()
print(f"Vous avez entré : {nombre}")
• Principe du bloc try : Encapsuler le code susceptible de générer une exception
• Exception spécifique : Capturer ValueError pour les erreurs de conversion
• Boucle de validation : Répéter jusqu'à obtenir une entrée valide
Validation : Processus de vérification que les données d'entrée respectent des critères prédéfinis.
- Doit être convertible en entier
- Doit être supérieur à 0
- Doit être un nombre entier
- Doit être dans un intervalle valide
try:
nombre = int(input("Entrez un nombre positif : "))
if nombre <= 0:
raise ValueError("Le nombre doit être positif")
except ValueError as e:
print(f"Erreur : {e}")
while True:
try:
nombre = int(input("Entrez un nombre positif : "))
if nombre > 0:
break
else:
print("Erreur : Le nombre doit être positif")
except ValueError:
print("Erreur : Veuillez entrer un nombre entier")
def saisir_entier_positif():
while True:
try:
nombre = int(input("Entrez un nombre positif : "))
if nombre <= 0:
raise ValueError
return nombre
except ValueError:
print("Erreur : Entrez un nombre entier positif")
def saisir_entier_positif():
while True:
try:
nombre = int(input("Entrez un nombre entier positif : "))
if nombre <= 0:
print("Erreur : Le nombre doit être supérieur à 0")
continue
return nombre
except ValueError:
print("Erreur : Ce n'est pas un nombre entier valide")
# Exemple d'utilisation
nombre = saisir_entier_positif()
print(f"Nombre positif saisi : {nombre}")
• Validation combinée : Utiliser try/except avec des conditions
• Continue dans boucle : Passer à l'itération suivante après erreur
• Message clair : Informer l'utilisateur de la cause de l'erreur
ZeroDivisionError : Exception levée lorsqu'on tente de diviser un nombre par zéro.
- Division explicite par 0
- Division par une variable valant 0
- Division par une expression évaluant à 0
- Calculs mathématiques complexes
try:
numerateur = float(input("Numérateur : "))
denominateur = float(input("Dénominateur : "))
resultat = numerateur / denominateur
print(f"Résultat : {resultat}")
except ZeroDivisionError:
print("Erreur : Division par zéro impossible")
try:
numerateur = float(input("Numérateur : "))
denominateur = float(input("Dénominateur : "))
if denominateur == 0:
raise ZeroDivisionError("Division par zéro")
resultat = numerateur / denominateur
print(f"Résultat : {resultat}")
except (ValueError, ZeroDivisionError) as e:
print(f"Erreur : {e}")
def division_securisee():
while True:
try:
numerateur = float(input("Numérateur : "))
denominateur = float(input("Dénominateur : "))
if denominateur == 0:
print("Erreur : Le dénominateur ne peut pas être zéro")
continue
resultat = numerateur / denominateur
return resultat
except ValueError:
print("Erreur : Veuillez entrer des nombres valides")
def calcul_division():
while True:
try:
num = float(input("Entrez le numérateur : "))
den = float(input("Entrez le dénominateur : "))
if den == 0:
print("Erreur : Impossible de diviser par zéro")
continue
resultat = num / den
print(f"Résultat de {num} / {den} = {resultat}")
break
except ValueError:
print("Erreur : Veuillez entrer des nombres valides")
except ZeroDivisionError:
print("Erreur : Division par zéro impossible")
# Exemple d'utilisation
calcul_division()
• ZeroDivisionError : Exception spécifique pour division par zéro
• Validation préventive : Vérifier avant la division
• Messages pertinents : Informer précisément de l'erreur
IndexError : Exception levée lorsqu'on tente d'accéder à un index hors des limites d'une séquence.
- Index négatif trop grand
- Index supérieur à la taille
- Accès à une liste vide
- Index calculé incorrectement
liste = [10, 20, 30, 40, 50]
try:
index = int(input("Entrez un index : "))
element = liste[index]
print(f"Élément à l'index {index} : {element}")
except IndexError:
print("Erreur : Index hors des limites")
except ValueError:
print("Erreur : Veuillez entrer un nombre entier")
liste = [10, 20, 30, 40, 50]
try:
index = int(input(f"Entrez un index (0-{len(liste)-1}) : "))
if index < 0 or index >= len(liste):
raise IndexError("Index hors limites")
element = liste[index]
print(f"Élément à l'index {index} : {element}")
except (ValueError, IndexError) as e:
print(f"Erreur : {e}")
def acces_liste_securisee(liste):
while True:
try:
index = int(input(f"Index (0-{len(liste)-1}) : "))
if 0 <= index < len(liste):
return liste[index]
else:
print(f"Erreur : Index doit être entre 0 et {len(liste)-1}")
except ValueError:
print("Erreur : Veuillez entrer un nombre entier")
def acceder_element():
liste = [10, 20, 30, 40, 50]
print(f"Liste : {liste}")
while True:
try:
index = int(input(f"Entrez un index (0-{len(liste)-1}) : "))
if index < 0:
print("Erreur : L'index ne peut pas être négatif")
continue
elif index >= len(liste):
print(f"Erreur : L'index doit être inférieur à {len(liste)}")
continue
element = liste[index]
print(f"L'élément à l'index {index} est : {element}")
break
except ValueError:
print("Erreur : Veuillez entrer un nombre entier valide")
# Exemple d'utilisation
acceder_element()
• IndexError : Levée lors d'accès hors limites
• Validation de plage : Vérifier que l'index est dans les bornes
• Longueur dynamique : Utiliser len() pour la borne supérieure
Erreurs de fichiers : Exceptions levées lors de l'accès à des fichiers (FileNotFoundError, PermissionError, etc.).
- FileNotFoundError : Fichier inexistant
- PermissionError : Droits insuffisants
- IOError : Problème d'entrée/sortie
- UnicodeDecodeError : Problème d'encodage
try:
nom_fichier = input("Entrez le nom du fichier : ")
with open(nom_fichier, 'r') as f:
contenu = f.read()
print(contenu)
except FileNotFoundError:
print("Erreur : Fichier non trouvé")
except PermissionError:
print("Erreur : Permissions insuffisantes")
def lire_fichier_securise():
while True:
try:
nom_fichier = input("Nom du fichier : ")
with open(nom_fichier, 'r', encoding='utf-8') as f:
return f.read()
except FileNotFoundError:
print("Erreur : Fichier introuvable")
except PermissionError:
print("Erreur : Permissions refusées")
except UnicodeDecodeError:
print("Erreur : Problème d'encodage")
except IOError as e:
print(f"Erreur d'E/S : {e}")
# Utilisation
contenu = lire_fichier_securise()
print(contenu)
import os
def lire_fichier_valide():
while True:
nom_fichier = input("Entrez le nom du fichier : ")
if not os.path.exists(nom_fichier):
print("Erreur : Fichier inexistant")
continue
if not os.access(nom_fichier, os.R_OK):
print("Erreur : Fichier non lisible")
continue
try:
with open(nom_fichier, 'r', encoding='utf-8') as f:
return f.read()
except Exception as e:
print(f"Erreur lors de la lecture : {e}")
import os
def lire_fichier_sans_erreur():
while True:
nom_fichier = input("Entrez le nom du fichier à lire : ")
# Vérification de l'existence du fichier
if not os.path.exists(nom_fichier):
print(f"Erreur : Le fichier '{nom_fichier}' n'existe pas")
continue
# Vérification des permissions
if not os.access(nom_fichier, os.R_OK):
print(f"Erreur : Vous n'avez pas la permission de lire '{nom_fichier}'")
continue
try:
with open(nom_fichier, 'r', encoding='utf-8') as f:
contenu = f.read()
print("Contenu du fichier :")
print(contenu)
break
except UnicodeDecodeError:
print("Erreur : Impossible de lire le fichier (problème d'encodage)")
except IOError as e:
print(f"Erreur d'entrée/sortie : {e}")
except Exception as e:
print(f"Erreur inattendue : {e}")
# Exemple d'utilisation
lire_fichier_sans_erreur()
• FileNotFoundError : Levée quand le fichier n'existe pas
• PermissionError : Levée quand les droits sont insuffisants
• Validation préalable : Vérifier existence et permissions avant ouverture
- try : Bloc de code susceptible de lever une exception
- except : Gestion spécifique d'une exception
- else : Exécuté si aucune exception n'est levée
- finally : Exécuté dans tous les cas
- raise : Lever manuellement une exception
- La gestion des erreurs améliore la robustesse des programmes
- Les exceptions doivent être capturées spécifiquement
- La validation préalable améliore la sécurité
- Les boucles permettent de redemander la saisie
- Les messages d'erreur doivent être clairs pour l'utilisateur
Saisie → Validation → Try/Except → Traitement → Correction → Répétition