Débogage efficace avec Python Assert Statement

Êtes-vous un programmeur? Si tel est le cas, le débogage est une compétence essentielle, quel que soit le langage dans lequel vous codez. Dans cet article, vous apprendrez à utiliser le affirmer statement en Python pour un débogage efficace.
Lorsque vous travaillez sur un projet, vous définirez plusieurs modules. Cela inclut les fonctions, les définitions de classe, etc. Et vous rencontrerez probablement des erreurs ou des résultats inattendus en raison d'un bug dans l'implémentation. Affirmer stateLes éléments sont utiles pour déboguer un tel code.
Dans ce tutoriel, nous allons apprendre la syntaxe pour utiliser l'assertion statement suivi d'exemples de code pour le voir en action. Nous verrons également ce que sont les erreurs d'assertion et comment nous pouvons les utiliser pour corriger les erreurs de code pendant le développement.
Commençons!
Comment utiliser Assert Statement en Python
Nous allons apprendre la syntaxe pour utiliser l'assertion statement, puis passez au code de quelques exemples.
Syntaxe de l'Assert Statement
Commençons par la syntaxe pour utiliser l'assertion statement en Python :
assert expression, message
Ici,
expression
est une expression Python valide à évaluerated. Cela peut être une condition sur la valeur d'une variable, la valeur de vérité d'une variable, la valeur de retour d'une fonction, etc.- Tant que le
expression
évaluerates àTrue
, l'affirmation statement ne génère pas d'erreur et ne renvoie rien. Cet indicateurates que le programme fonctionne comme prévu. - Si la
expression
n'est plusTrue
, unAssertionError
exception est levée. message
est un optionnel chaîne. Vous pouvez spécifier un message qui s'affiche dans la trace chaque fois qu'unAssertionError
exception est levée.
Ensuite, passons au code de quelques exemples où l'assertion statement peut nous aider à écrire du code plus propre et sans bug.
Vous pouvez trouver les exemples de code utilisés dans ce didacticiel dans cet essentiel GitHub.
Python's Assert StateExemples de mise en œuvre

Prenons l'exemple suivant. Dis que tu as un discount
variable dans votre code. Mais vous aimeriez que sa valeur soit toujours inférieure ou égale à max_discount
.
Pour vérifier que vous avez un accidentally ne réglez pas le discount
variable à une valeur, vous pouvez ajouter une assertion. L'expression à évaluerate est: discount <= max_discount
.
>>> max_discount = 50
>>> discount = 20
>>> assert discount <= max_discount
Ici, discount
(20) est inférieur à max_discount
(50). Donc l'affirmation statement ne génère aucune erreur.
L'exception AssertionError
Si la discount
la variable est définie sur une valeur greater que max_discount
, un AssertionError
exception est levée.
>>> discount = 75
>>> assert discount <= max_discount
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
Nous savons que l'affirmation statement nous permet également de spécifier une chaîne de message facultative.
Utilisons également une chaîne de message qui donne un plus descriptive informations de diagnostic. À l'affirmation statement, ajoutons une f-string Python qui contient également les valeurs de discount
et de max_discount
.
>>> assert discount <= max_discount, f"discount should be at most {max_discount}; got discount = {discount}"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: discount should be at most 50; got discount = 75
Comme on le voit dans la cellule de sortie ci-dessus, le AssertionError
l'exception inclut désormais les valeurs de discount
et de max_discount
variables.
Débogage et test des fonctions Python avec Assert
Lors de la définition des fonctions, vous pouvez parfois introduire par inadvertance des bugs (erreurs logiques) quirevempêcher votre fonction de fonctionner comme prévu.

Prenons un exemple. Supposons qu'il y ait un test dans une classe et que les élèves aient la possibilité de répondre à une question bonus. Tout étudiant qui tente la question bonus obtiendra 10 points supplémentaires au test. 😄
Considérons la fonction suivante get_final_score
:
- Il prend en compte un score actuel,
score
, et un booléenbonus
. - Si un élève a répondu à la question bonus, le booléen
bonus
isTrue
, et ils obtiennent 10 points de plus que leur score actuel. - La fonction renvoie ensuite le score final.
def get_final_score(score,bonus):
if bonus:
score += 10
return score
Faisons quelques appels à la fonction. On voit que pour les scores de 34 et 40 avec bonus
ajuster à True
et de False
, les notes finales sont respectivement de 44 et 40.
print(get_final_score(34,True))
# 44
print(get_final_score(40,False))
# 40
Cependant, le maximum de points au test est, disons, de 50. Ainsi, si un élève obtient 49 points et a également répondu à la question bonus, la fonction get_final_score
se fera un plaisir de calculer le score final à 59.
print(get_final_score(49,True))
# 59
Techniqueally, c'est possible. Mais supposons qu'un étudiant ne puisse pas obtenir plus que le maximum de points possible au test. 🙂
Initialisons donc un max_score
variable. Et capturez le score renvoyé par la fonction dans le final_score
variable.
Ensuite, nous ajoutons une assertion qui vérifie si le final_score
est inférieure à la max_score
.
def get_final_score(score,bonus):
if bonus:
score += 10
return score
final_score = get_final_score(47,True)
max_score = 50
assert final_score <= max_score
Nous obtenons maintenant une exception AssertionError pour l'appel de fonction get_final_score(47,True)
:
Traceback (most recent call last):
File "main.py", line 17, in <module>
assert final_score <= max_score
AssertionError
Maintenant, nous ajoutons un descriptive f-string à l'assertion Python statement:
assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
Traceback (most recent call last):
File "main.py", line 17, in <module>
assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
AssertionError: final_score should be at most 50; got 57
Modification de la fonction
Revenons en arrière et modifions la définition de get_final_score
fonction pour corriger le comportement inattendu :
- La fonction
get_final_score
prend égalementmax_score
en tant que paramètre - Nous vérifions si
bonus
est vrai. Si True, nous ajoutons 10 points à la variable score. - Ensuite, nous vérifions si
score
est greater quemax_score
. Si c'est le cas, nous revenonsmax_score
. - Autreswise, nous retournons
score
.
Nous nous sommes assurés que le score final est toujours inférieur ou égal à max_score
.
def get_final_score(score,bonus,max_score):
if bonus:
score += 10
if score > max_score:
return max_score
return score
Comme exercice rapide, écrivez quelques assertions pour confirmer que la fonction fonctionne maintenant comme prévu.
Remarque sur l'exception AssertionError
Bien qu'une exception AssertionError se produise lorsque l'expression évalueates à False, nous devons nous rappeler de ne pas gérer des erreurs telles que exceptions. Ce qui signifie que nous ne devrait pas faire quelque chose comme ça:
try:
<doing this>
except AssertionError:
<do this>
Dans le prevexemple intéressant sur get_final_score
, nous avons utilisé l'assertion pour vérifier si final_score
est inférieur à max_score
. Ensuite nous modifié la définition de la fonction de sorte qu'il n'y ait pas d'erreurs d'assertion.
C'est ce que l'équipe chez affirmations sont pour. Ce sont des contrôles d’intégrité du code et aident à écrire un code plus propre. La gestion des exceptions, en revanche, consiste à anticiperate et gérer les erreurs inattendues au moment de l'exécution. Ceux-ci incluent souvent des types et des valeurs d’entrée non valides.
Pour résumer, vous devez utiliser Python assert statement pour un débogage efficace et ne pas gérer les AssertionErrors comme exceptions.
Conclusion
Ce tutoriel vous a aidé à comprendre comment utiliser assert statement en Python. Voici un résumé de ce que vous avez appris :
- Python affirme stateLes ments (affirmations) prennent la forme
assert expression
. Ceci vérifie si leexpression
isTrue
. S'il n'évalue pasate àTrue
, unAssertionError
exception est levée. - Vous pouvez également utiliser l'assertion avec la syntaxe
assert expression, message
. Cela imprimera lemessage
chaîne chaque fois qu'unAssertionError
exception se produit. - N'oubliez pas de ne pas implémenter la gestion des exceptions pour gérer les erreurs d'assertion. Et utilisez les assertions comme outil de débogage utile pour vérifier l'intégrité de votre code.
En tant que développeur, les assertions vous aident à déboguer. Pour vous assurer que tous les composants individuels (modules) du projet fonctionnent comme prévu, vous pouvez apprendre à écrire tests unitaires en Python.
Ensuite, consultez cette liste de projets Python débutants vous pouvez travailler.