Comment utiliser le débogueur Python

 Comment utiliser le débogueur Python


Cet article ne concerne pas l’apprentissage automatique, mais sur un génie logiciel qui est souvent pratique dans la pratique des sciences des données. Lors de l’écriture de code, tout le monde reçoit des erreurs. Parfois, il est difficile de les déboguer. L’utilisation d’un débogueur peut aider, mais peut également être intimidante. Il s’agit d’un didacticiel TLDR sur l’utilisation de PDB dans Ipython, axé sur la recherche de variables à l’intérieur des fonctions.

L’avantage d’avoir des variables globales est que lorsqu’un script s’arrête avec une erreur, vous pouvez consulter les variables pour découvrir la cause. Avec des fonctions, pas de chance. Et bien sûr, tous les logiciels non triviaux ont besoin de fonctions.

C’est là que le débogueur entre en jeu. Python est livré avec un débogueur appelé PDB. Nous envisagerons de l’utiliser dans Ipython.


Que votre code soit aussi fort et aussi exempt d’erreurs que cette blockchain

Tout d’abord, vous l’allumez:

In (1): pdb
Automatic pdb calling has been turned ON

Mieux encore, vous avez la possibilité de choisir de passer en mode débogage uniquement après une erreur. Dans un tel cas, vous tapez juste déboguer post facttum. Merci à Ehud Ben-Reuven d’avoir souligné cela.

Les deux PDB et déboguer sont des commandes IPython Magic, donc leur syntaxe officielle est % pdb et %déboguer. Les formulaires plus courts fonctionnent s’il n’y a pas de global de ces noms.

Maintenant, définissons une fonction:

def add_two( x ):
    return x + 2

Lorsqu’une erreur se produit, vous obtiendrez une invite de débogueur:

In (3): add_two('two')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
----> 1 add_two('two')

 in add_two(x)
      1 def add_two( x ):
----> 2         return x + 2

TypeError: cannot concatenate 'str' and 'int' objects
> (2)add_two()
      1 def add_two( x ):
----> 2         return x + 2

ipdb>

Ou, avec une annonce automatique de PDB (repérez une différence):

In (3): add_two('two')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
----> 1 add_two('two')

 in add_two(x)
      1 def add_two( x ):
----> 2     return x + 2

TypeError: cannot concatenate 'str' and 'int' objects

In (4): debug
> (2)add_two()
      1 def add_two( x ):
----> 2     return x + 2

ipdb>

Dans cet exemple, l’erreur est évidente et énoncée dans le message, nous n’avons donc pas vraiment besoin d’un débogueur. Le but est de se familiariser avec l’utilisation du monde réel.

Le PDB accepte un certain nombre de commandes, dont beaucoup sont une lettre. Vous pouvez les énumérer avec H.

Pour nos besoins, la commande la plus importante est ppour «imprimer»:

ipdb> h p
p expression
Print the value of the expression.
ipdb> p x
'two'   

Cadres

Lorsque vous utilisez une bibliothèque externe, la trace de pile se compose de nombreuses trames. En anglais, cela signifie qu’une fonction appelée fonction qui a appelé une fonction et ainsi de suite, et quelque part dans cette pile, l’erreur s’est produite. Le plus souvent, on souhaite trouver une erreur dans son propre code, mais le débogueur atterrit à la fonction la plus profonde et la plus profonde. Nous devons remonter la pile, et la commande pour le faire est u. Vous le tapez jusqu’à ce que l’extrait familier du code affiche. Vous pouvez maintenant inspecter les variables.

Traces / points d’arrêt

Vous n’avez pas besoin d’une erreur pour arrêter l’exécution d’un programme et accéder au débogueur. Il suffit de définir une trace ou un point d’arrêt quelque part dans le code:

import pdb; pdb.set_trace()

Lorsque l’exécution atteint ce point, le programme s’arrête et vous obtiendrez une invite de débogueur. Pour poursuivre l’exécution, utilisez le c commande.

Vous pouvez également ajouter un point d’arrêt à l’intérieur du débogueur avec le b commande.

Quitte

q quitte le débogueur. Vous pouvez également sortir avec Ctrl-D.

Lorsque vous avez terminé son débogage et que je ne veux pas d’invite de débogueur sur les erreurs, vous l’éteignez:

In (5): pdb
Automatic pdb calling has been turned OFF

C’est l’essentiel de. Pas vraiment une science des fusées, c’est-à-dire?



Source link

Related post