Geekflare est soutenu par notre public. Nous pouvons gagner des commissions d'affiliation en achetant des liens sur ce site.
Partager sur:

Débogage efficace avec l'instruction Python Assert

Débogage-efficace-avec-la-instruction-Python-Assert
Scanner de sécurité des applications Web Invicti – la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Ê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 déclaration en Python pour un débogage efficace.

Lorsque vous travaillez sur un projet, vous définissez plusieurs modules. Cela inclut les fonctions, les définitions de classe, etc. Et vous rencontrerez probablement des erreurs ou des résultats inattendus à cause d'un bogue dans l'implémentation. Les déclarations d'assertion sont utiles pour déboguer ce code.

Dans ce tutoriel, nous allons apprendre la syntaxe pour utiliser l'instruction assert suivie d'exemples de code pour la voir en action. Nous verrons également quelles sont les erreurs d'assertion et comment nous pouvons les utiliser pour corriger les erreurs dans le code pendant le développement.

Commençons!

How to Use the Assert Statement in Python

Nous allons apprendre la syntaxe pour utiliser l'instruction assert, puis procéder au codage de quelques exemples.

Syntaxe de l'instruction Assert

Commençons par la syntaxe pour utiliser l'instruction assert en Python :

assert expression, message

Ici,

  • expression est une expression Python valide à évaluer. Cela peut être une condition sur la valeur de la variable, la valeur de vérité de la variable, la valeur de retour d'une fonction, etc.
  • Tant que le expression évalue à True, l'instruction assert ne génère pas d'erreur et ne renvoie rien. Cela indique que le programme fonctionne comme prévu.
  • Si la expression n'est plus True, un AssertionError 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'un AssertionError exception est levée.

Ensuite, passons au code de quelques exemples où l'instruction assert peut nous aider à écrire du code plus propre et sans bogue.

Vous pouvez trouver les exemples de code utilisés dans ce didacticiel dans cet essentiel GitHub.

Python’s Assert Statement Examples

Pythons-Assert-Statement-Exemples

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 n'avez pas défini accidentellement le discount variable à une valeur, vous pouvez ajouter une assertion. L'expression à évaluer est : discount <= max_discount.

>>> max_discount = 50
>>> discount = 20
>>> assert discount <= max_discount

Ici, discount (20) est inférieur à max_discount (50). Ainsi, l'instruction assert ne génère aucune erreur.

L'exception AssertionError

Si la discount variable est définie sur une valeur supérieure à 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'instruction assert nous permet également de spécifier une chaîne de message facultative.

Utilisons également une chaîne de message qui donne des informations de diagnostic plus descriptives. À l'instruction assert, ajoutons une f-string Python qui contient également les valeurs de discount et 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 max_discount variables.

Debugging and Testing Python Functions with Assert

Lors de la définition des fonctions, vous pouvez parfois introduire par inadvertance des bogues (erreurs logiques) qui empêcheront votre fonction de fonctionner comme prévu.

Débogage-et-test-des-fonctions-Python-avec-Assert

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éen bonus
  • Si un élève a répondu à la question bonus, le booléen bonus is True, 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 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

Techniquement, c'est possible. Mais supposons qu'un étudiant ne peut pas marquer plus que le maximum de points possibles pour le 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

Nous ajoutons maintenant une chaîne f descriptive à l'instruction assert Python :

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 également max_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 supérieure max_score. Si c'est le cas, nous revenons max_score.
  • Sinon, on revient 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.

A Note on AssertionError Exception

Bien qu'une exception AssertionError se produise lorsque l'expression est évaluée à False, nous devons nous rappeler de ne pas gérer les 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 l'exemple précédent 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 vérifications de cohérence pour le code et aident à écrire un code plus propre. La gestion des exceptions, quant à elle, consiste à anticiper et à gérer les erreurs inattendues lors de l'exécution. Ceux-ci incluent souvent des types et des valeurs d'entrée non valides.

Pour résumer, vous devez utiliser l'instruction Python assert pour un débogage efficace et ne pas gérer les AssertionErrors comme des exceptions.

Conclusion

Ce tutoriel vous a aidé à comprendre comment utiliser l'instruction assert en Python. Voici un résumé de ce que vous avez appris :

  • Les déclarations d'assertion Python (assertions) prennent la forme assert expression. Ceci vérifie si le expression is True. S'il n'est pas évalué à True, un AssertionError exception est levée.
  • Vous pouvez également utiliser l'assertion avec la syntaxe assert expression, message. Cela imprimera le message chaîne chaque fois qu'un AssertionError 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.

Merci à nos commanditaires
Plus de bonnes lectures sur le développement
Alimentez votre entreprise
Certains des outils et services pour aider votre entreprise à se développer.
  • Invicti utilise Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.
    Essayez Brightdata
  • Semrush est une solution de marketing numérique tout-en-un avec plus de 50 outils de référencement, de médias sociaux et de marketing de contenu.
    Essayez Semrush
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.
    Essayez Intruder