Python -Assertions

Bonjour, aspirants programmeurs ! Aujourd'hui, nous allons plonger dans le monde des assertions Python. En tant que votre enseignant en informatique de quartier, je suis excité de vous guider à travers ce sujet fascinant. Embarkons ensemble sur ce voyage !

Python - Assertions

Assertions en Python

Imaginez que vous construisez une cabane dans les arbres. Vous ne commenceriez pas à clouer des planches ensemble sans d'abord vous assurer que votre fondation est solide, n'est-ce pas ? C'est exactement ce que font les assertions en programmation. Elles nous aident à vérifier si certaines conditions sont vraies avant de procéder avec notre code.

En Python, les assertions sont un moyen de dire : "Je crois que cette condition est vraie et si ce n'est pas le cas, quelque chose s'est terriblement mal passé !" Elles sont comme de petits points de contrôle dans votre code qui assurent que tout est comme il devrait être.

La déclaration assert

La syntaxe de base d'une assertion en Python est assez simple :

assert condition, message

Ici, condition est la chose que nous vérifions, et message est une explication optionnelle qui apparaît si l'assertion échoue.

Regardons un exemple simple :

x = 5
assert x == 5, "x devrait être 5"
print("Le code continue...")

Dans ce cas, l'assertion passe silencieusement car x est effectivement 5, et notre code continue à s'exécuter. Mais que se passe-t-il si nous change la valeur de x ?

x = 10
assert x == 5, "x devrait être 5"
print("Cette ligne ne sera jamais atteinte !")

Oups ! Cela lèverait une AssertionError avec notre message personnalisé, "x devrait être 5".

Utilisation des Assertions

Les assertions sont extrêmement utiles dans divers scénarios. Explorons-en quelques-uns :

1. Vérification des entrées de fonction

def calculer_surface_rectangle(longueur, largeur):
assert longueur > 0 and largeur > 0, "La longueur et la largeur doivent être positives"
return longueur * largeur

# Cela fonctionnera
print(calculer_surface_rectangle(5, 3))

# Cela lèvera une AssertionError
print(calculer_surface_rectangle(-1, 3))

Ici, nous nous assurons que personne ne tente de calculer la surface d'un rectangle avec des dimensions négatives ou nulles. Ce serait un rectangle assez particulier, n'est-ce pas ?

2. Vérification de l'état interne

class CompteBancaire:
def __init__(self, solde_initial):
self.solde = solde_initial
assert self.solde >= 0, "Le solde initial ne peut pas être négatif"

def retirer(self, montant):
assert montant > 0, "Le montant de retrait doit être positif"
assert self.solde >= montant, "Fonds insuffisants"
self.solde -= montant

compte = CompteBancaire(100)
compte.retirer(50)  # Cela fonctionne
compte.retirer(60)  # Cela lève une AssertionError

Dans cet exemple, nous utilisons des assertions pour nous assurer que notre compte bancaire se comporte correctement. Nous ne pouvons pas commencer avec un solde négatif ou retirer plus d'argent que nous n'avons. Si seulement les vrais banques étaient aussi strictes !

Messages d'erreur personnalisés

Comme nous l'avons vu, nous pouvons ajouter des messages d'erreur personnalisés à nos assertions. Ces messages peuvent être extrêmement utiles lors du débogage :

def diviser(a, b):
assert b != 0, f"Impossible de diviser {a} par zéro"
return a / b

print(diviser(10, 2))  # Cela fonctionne
print(diviser(10, 0))  # Cela lève une AssertionError avec notre message personnalisé

Gestion de l'AssertionError

Parfois, nous pourrions vouloir attraper et gérer les AssertionError plutôt que de laisser elles faire planter notre programme. Nous pouvons le faire à l'aide d'un bloc try-except :

def fonction_risquee(x):
assert x > 0, "x doit être positif"
return 1 / x

try:
resultat = fonction_risquee(-5)
except AssertionError as e:
print(f"Une assertion a échoué : {e}")
resultat = None

print(f"Le résultat est : {resultat}")

Cela permet à notre programme de continuer à s'exécuter même si une assertion échoue, ce qui peut être utile dans certaines situations.

Assertions vs. Exceptions

Vous vous demandez peut-être, "Pourquoi utiliser des assertions alors que nous avons des exceptions ?" Bonne question ! Analysons les différences clés :

Assertions Exceptions
Utilisées pour vérifier les erreurs de programmeur Utilisées pour gérer les erreurs d'exécution
Doivent être utilisées pour des conditions qui ne devraient jamais se produire Utilisées pour des conditions d'erreur prévues
Peuvent être désactivées globalement Toujours actives
Principalement un aide au débogage Partie de la stratégie de gestion des erreurs

Les assertions sont comme les vérifications de sécurité que nous faisons avant que le voyage de la montagne russe ne commence. Les exceptions sont plus comme les harnais de sécurité qui nous attrapent si quelque chose va mal pendant le voyage.

En conclusion, les assertions sont un outil puissant dans la boîte à outils d'un programmeur Python. Elles nous aident à écrire un code plus robuste et plus fiable en capturant les problèmes potentiels tôt. N'oubliez pas, il est toujours préférable de échouer rapidement et bruyamment lorsque quelque chose d'imprévu se produit dans votre code.

Au fur et à mesure de votre parcours Python, gardez les assertions à l'esprit. Elles sont comme des gardiens fidèles, veillant sur votre code et s'assurant que tout est comme il devrait être. Bon codage, futurs Pythonistes !

Credits: Image by storyset