Comment déboguer Python avec une console interactive

introduction

  • Le débogage * fait partie du processus de développement logiciel où les programmeurs recherchent puis résolvent les problèmes qui empêchent le logiciel de fonctionner correctement.

Python https://docs.python.org/3/library/code.html [+ code + module] est un outil utile et rapide pour le débogage car il peut être utilisé pour émuler l’interpréteur interactif. Le module vous offre également la possibilité d’expérimenter le code que vous écrivez en Python.

Comprendre le module + code +

Plutôt que de parcourir le code avec un débogueur, vous pouvez https://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-3 ajouter le module + code +] à votre Python. programme pour indiquer au programme d’arrêter l’exécution et d’entrer en mode interactif afin d’examiner le fonctionnement de votre code. Le module + code + fait partie de la bibliothèque standard Python.

Cela est utile car vous pouvez utiliser un interprète sans sacrifier la complexité et la permanence que peuvent offrir les fichiers de programmation. En utilisant le module + code + vous pouvez éviter d’utiliser les instructions + print () + dans votre code comme une forme de débogage, qui peut devenir difficile à manier avec le temps.

Pour utiliser le module en tant que méthode de débogage, vous pouvez utiliser la fonction + interact () + du module, qui arrête l’exécution du programme au point où il est appelé et vous fournit une console interactive. afin que vous puissiez examiner l’état actuel de votre programme.

La fonction avec ses paramètres possibles sont les suivants:

code.interact(banner=None, readfunc=None, local=None, exitmsg=None)

Cette fonction exécute une boucle read-eval-print et crée une instance d’objet de la https://docs.python.org/3/library/code.html#code.InteractiveConsole [+ + InteractiveConsole + class], qui émule le comportement de l’interpréteur Python interactif.

Les paramètres facultatifs sont les suivants:

  • + banner + peut être défini sur string, afin que vous puissiez indiquer où l’interprète se lance

  • + readfunc + peut être utilisé comme https://docs.python.org/3/library/code.html#code.InteractiveConsole.raw_input [+ InteractiveConsole.raw_input () + méthode]

  • + local + définira l’espace de noms par défaut pour la boucle d’interprétation

  • + exitmsg + peut être défini sur une chaîne pour indiquer la fin de l’interpréteur

Avec le paramètre + local +, vous pouvez utiliser, par exemple:

  • + local = locals () + pour un espace de noms local

  • + local = globals () + pour un espace de noms global

  • + local = dict (globals (), ** locals ()) + pour utiliser à la fois l’espace de noms global et l’espace de noms local présent

Notez que le paramètre + exitmsg + est nouveau pour Python 3.6. Par conséquent, si vous utilisez une version plus ancienne de Python, mettez-la à jour ou laissez le paramètre + exitmsg +.

Vous pouvez placer la fonction + interact () + où vous voulez dans votre programme pour lancer l’interpréteur interactif dans le code.

Travailler avec le module + code +

Examinons cela dans le contexte d’un programme de solde de compte bancaire appelé + balances.py +. Nous allons définir le paramètre + local + sur + locals () + pour définir l’espace de nom sur local.

soldes.py

# Import code module
import code

bal_a = 2324
bal_b = 0
bal_c = 409
bal_d = -2

account_balances = [bal_a, bal_b, bal_c, bal_d]


def display_bal():
   for balance in account_balances:
       if balance < 0:
           print("Account balance of {} is below 0; add funds now."
                 .format(balance))

       elif balance == 0:
           print("Account balance of {} is equal to 0; add funds soon."
                 .format(balance))

       else:
           print("Account balance of {} is above 0.".format(balance))

# Use interact() function to start the interpreter with local namespace
code.interact(local=locals())

display_bal()

Nous avons utilisé la fonction + code.interact () + avec le paramètre + local = locals () + pour utiliser l’espace de nom local comme valeur par défaut dans la boucle d’interprétation.

Lançons le programme ci-dessus, en utilisant la commande + python3 + si nous ne sommes pas dans un environnement virtuel, ou la commande + python + si nous sommes:

python balances.py

Une fois le programme exécuté, nous recevrons d’abord le résultat suivant:

Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

Votre curseur sera placé à la fin de la ligne + >>> +, exactement comme dans le shell interactif Python.

À partir de là, vous pouvez émettre des appels pour imprimer des variables, des fonctions, etc.:

>>>
409
>>>
[2324, 0, 409, -2]
>>>
Account balance of 2324 is 0 or above.
Account balance of 0 is equal to 0, add funds soon.
Account balance of 409 is 0 or above.
Account balance of -2 is below 0, add funds now.
None
>>>
<function display_bal at 0x104b80f28>
>>>

Nous voyons qu’en utilisant l’espace de noms local, nous pouvons imprimer les variables et appeler la fonction. Le dernier appel + print () + indique l’emplacement de la fonction + display_bal + dans la mémoire de l’ordinateur.

Une fois que vous êtes satisfait de ce que vous avez pu examiner depuis votre travail avec l’interpréteur, vous pouvez appuyer sur les touches + CTRL + D + pour les systèmes * nix, ou + CTRL + Z + pour les systèmes Windows pour quitter la console. et continuez avec l’exécution du programme.

Si vous souhaitez quitter la console sans exécuter le reste du programme, vous pouvez le faire en tapant + quit () + et le programme sera abandonné.

Pour tirer parti des paramètres + banner + et + exitmsg +, procédez comme suit:

soldes.py

...
# Use interact() function to start the interpreter
code.interact(banner="Start", local=locals(), exitmsg="End")

display_bal()

Lorsque nous exécutons le programme, nous recevons le résultat suivant lors de l’exécution du programme:

Start
>>>

L’utilisation du paramètre + banner + peut vous permettre de définir plusieurs points dans votre code et de vous permettre de les identifier. Par exemple, vous pouvez avoir une + bannière + qui imprime " Dans [for-loop] (https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python -3) " avec un + exitmsg + qui affiche `+ 'Out of for-loop" + `, afin que vous puissiez dire exactement où vous vous trouvez dans le code.

A partir de là, nous pouvons utiliser l’interprète comme d’habitude. Une fois que nous avons tapé + CTRL + D + pour quitter l’interpréteur, nous recevrons le message de sortie et la fonction s’exécutera:

End
Account balance of 2324 is 0 or above.
Account balance of 0 is equal to 0, add funds soon.
Account balance of 409 is 0 or above.
Account balance of -2 is below 0, add funds now.

Le programme est maintenant complètement exécuté après la session interactive.

Une fois que vous avez terminé en utilisant le module + code + pour déboguer votre code, vous devez supprimer les fonctions + code + et l’instruction import pour que votre programme s’exécute comme d’habitude. Le module + code + fournit un utilitaire, donc une fois que vous avez terminé, il est important de nettoyer après vous-même.

Conclusion

Utiliser le module + code + pour lancer une console interactive peut vous permettre de voir ce que le code fait au niveau granulaire pour comprendre son comportement et apporter les modifications nécessaires. Pour en savoir plus à ce sujet, vous pouvez lire la https://docs.python.org/3/library/code.html (documentation officielle du module + code +]].

Pour en savoir plus sur les autres méthodes que vous pouvez utiliser pour déboguer votre code Python, consultez notre tutoriel à l’adresse how pour utiliser le Python. le débogueur + pdb +, et notre tutoriel sur comment utiliser la journalisation.