Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

Débogueur Python :améliorez sans effort vos compétences de débogage

Le débogage du code Python, pour beaucoup d'entre nous, revient à ajouter des instructions d'impression et à essayer de comprendre ce qui se passe en fonction de la sortie. Ce n'est pas idéal, mais pour une raison quelconque, les gens ne veulent tout simplement pas toucher au débogueur Python.

Table des matières

  • Utiliser print pour déboguer le code
  • Définir un point d'arrêt du débogueur Python
  • Utiliser le débogueur Python
  • Commandes du débogueur Python
  • Continuez à apprendre

Utiliser print pour déboguer le code

Si vous faites partie de ces personnes qui utilisent print pour le débogage, je ne vous juge pas . Apprendre Python est difficile. La programmation est difficile. La vie est dure. Je comprends qu'apprendre encore une autre chose semble fastidieux si vous avez déjà du mal. Et ajouter cette déclaration d'impression à votre code... c'est juste plus facile. Un petit aveu :je le fais encore tout le temps aussi. Ce n'est pas aussi grave que certains le prétendent.

Cela dit, je vais vous apprendre une petite astuce qui sera aussi simple que d'ajouter des instructions d'impression à votre code. Cependant, cette astuce vous donne des pouvoirs de débogage infinis et vous permettra de conquérir le monde, si vous en avez besoin.

Définir un point d'arrêt du débogueur Python

Vous n'avez pas besoin d'un IDE pour déboguer votre code correctement. Cette astuce fonctionne toujours, même dans l'éditeur le plus simple, et même dans Jupyter Notebooks.

L'astuce se résume à ceci :définir un soi-disant point d'arrêt à l'aide de l'instruction breakpoint() . Vous pouvez l'insérer dans votre code, quel que soit l'éditeur ou l'IDE que vous utilisez, à l'endroit où vous placeriez normalement cette instruction d'impression embêtante.

Alors que se passe-t-il lorsque vous le faites ? Découvrons-le! Créez un programme simple, comme celui ci-dessous :

def add_two(x):
    return x + 2
for i in range(1, 10):
    a = add_two(i)
    breakpoint()
    print(a)

Lorsque vous exécutez ceci, et peu importe si vous le faites dans le REPL, à partir de la ligne de commande ou dans votre IDE, vous êtes déposé dans le débogueur Python appelé PDB. Et maintenant ?

Utiliser le débogueur Python

Lorsque je lance le petit programme ci-dessus, voici ce qui se passe :

$ python3 breakpointing.py
> /home/erik/breakpointing.py(7)<module>()
-> print(a)
(Pdb)_

Il y a quelques choses à voir ici :

  • Il montre le fichier en cours qui a été démarré (breakpointing.py )
  • Après cela, il affiche la prochaine commande qui était sur le point de s'exécuter, mais qui a été interrompue par l'appel à breakpoint() .
  • Et enfin, nous voyons l'invite pdb, attendant notre entrée.

Le débogueur Python est en fait un shell Python entièrement fonctionnel, tout comme le REPL.

À ce stade, nous pouvons inspecter l'environnement actuel. Voyons quelle est la valeur de a est en ce moment :

(Pdb) print(a)
3
(Pdb) print(i)
1

Au lieu d'imprimer, vous pouvez également utiliser la commande spécifique pdb p, comme ceci :

(Pdb) p a
3
(Pdb_ p i
1

Exécution de la ligne suivante

Et si nous voulons exécuter la prochaine ligne de code ? Il y a deux options :

  • Avec s ou step , vous exécutez la ligne courante. Le débogueur s'arrête à la première occasion possible après cela.
  • Avec n ou next , vous exécutez également la ligne courante mais maintenant le débogueur continue jusqu'à ce que la ligne suivante de la fonction courante soit atteinte.

Pour que ce soit plus clair :step entre joyeusement dans un appel de fonction et s'interrompt à l'intérieur de cette fonction. En revanche, next exécute la fonction jusqu'à ce qu'elle revienne et s'arrête à la ligne suivante.

D'autres débogueurs et IDE appellent également cela "step into" (au lieu de step) et "step over" (au lieu de next).

Utilisons maintenant ces deux :

$ python3 breakpointing.py
-> print(a)
(Pdb) s
3
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) n
-> breakpoint()
(Pdb) n
-> print(a)
(Pdb) n
4
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) s
--Call--
-> def add_two(x):
(Pdb) s
-> return x + 2
(Pdb) s
--Return--
5
-> return x + 2
(Pdb) s
-> breakpoint()
(Pdb)

Comme vous pouvez le voir, nous enjambons d'abord l'appel au add_two avec n . La deuxième fois, nous entrons dans la fonction avec s .

Commandes du débogueur Python

Il existe d'autres commandes que vous pouvez essayer par vous-même. Je ne vais pas tous les lister, juste les plus utiles :

  • h (aide) :affiche toutes les commandes disponibles. Prend également un argument, par ex. h c vous dit ce que le c la commande fait
  • c (continuer) :commencer à courir jusqu'au prochain point d'arrêt
  • l (list) :liste le code source autour de la ligne courante
  • p :affiche le résultat de l'expression suivante. Vous pouvez l'utiliser au lieu d'appeler print()
  • pp :jolie impression, utile pour imprimer des structures de données comme des dictionnaires
  • redémarrer :redémarrer le programme en cours

Pour la documentation complète, rendez-vous sur la page du débogueur Python, où toutes les commandes sont répertoriées.

Continuez à apprendre

Bien que cela puisse être très pratique, il est avantageux de se plonger dans le débogueur proposé par votre IDE. Si vous êtes un utilisateur de VSCode, j'ai écrit un tutoriel sur la façon de déboguer le code Python dans VSCode.


Python

  1. Entrée, sortie et importation Python
  2. Instruction Python Print() :comment imprimer avec des exemples
  3. Chaînes Python :Remplacer, Joindre, Diviser, Inverser, Majuscules et Minuscules
  4. Python time.sleep() :ajoutez un délai à votre code (exemple)
  5. Python New Line:Comment imprimer SANS nouvelle ligne en Python
  6. Les flottes connectées améliorent votre résultat net
  7. Comment les prototypes améliorent votre processus de fabrication
  8. 5 façons d'améliorer vos pièces de tôlerie
  9. 3 conseils pour améliorer votre plan de maintenance de l'équipement