cours python gratuit d’initiation : AUTRE IDE – LE DÉBOGAGE
C’est le cours python numéro 14 de la série des cours d’initiation à python.
AUTRES IDE
Maintenant que nous avons une certaine expérience de la programmation, nous pouvons revenir un instant en arrière et réfléchir aux étapes nécessaires pour développer un programme. Nous pouvons les résumer ainsi :
- Ecrire le programme
- Traduire le programme pour l’ordinateur
- Exécutez le programme
Il y a de nombreuses années, ces trois étapes étaient exécutées par trois applications différentes : d’abord le texte était écrit à l’aide d’un éditeur et enregistré, puis le fichier texte était traité avec un compilateur qui le traduisait en langage machine et produisait un fichier exécutable, et enfin l’exécutable était lancé directement depuis le système d’exploitation de la machine utilisée. Dans le processus de développement, un programmeur devait continuellement ouvrir et fermer différentes applications (gardez à l’esprit que les anciens systèmes d’exploitation ne permettaient pas d’ouvrir plusieurs programmes en même temps), et même une erreur de syntaxe triviale obligeait à recommencer.
Un pas en avant significatif a été fait avec les IDE (en anglais : Integrated Development Environment). Un IDE est une application unique qui vous permet de faire toutes ces choses en son sein : cela fait de la programmation une activité beaucoup plus intuitive et plus rapide, car nous pouvons facilement écrire, exécuter, corriger les erreurs et réessayer sans aucune pause entre une activité et l’autre . C’est le cas avec IDLE, qui est l’environnement de développement Python standard. IDLE est complètement Open Source comme le dicte toute la philosophie de Python, il est programmé en Python, et il est développé par des bénévoles (si un jour vous deveniez un programmeur Python expert, vous pourriez aussi contribuer).
Il existe aussi des IDE commerciaux, développés par des éditeurs de logiciels indépendants, qui sont beaucoup plus puissants que IDLE et disposent de beaucoup de fonctions (que pour le moment vous ne savez pas utiliser !). Dans cette leçon, je décrirai un IDE gratuit (mais pas Open Source) assez simple, qui accélérera votre travail. En cherchant sur Internet, vous pouvez en trouver d’autres, mais presque tous s’adressent à des programmeurs assez expérimentés et ont de nombreuses fonctions qui peuvent vous dérouter au départ.
WING 101
Wing 101, téléchargeable ici, est la version de base gratuite d’un programme commercial et est expressément dédié aux “programmeurs débutants”. Une fois installé et lancé nous nous rendrons compte que finalement toute l’application est composée d’une seule fenêtre, dans laquelle nous avons :
- en haut l’éditeur, dans lequel on va écrire les programmes
- en bas à droite le shell (l’équivalent de IDLE), dans lequel on va lire et écrire les I/Oà gauche un panneau de recherche
Voyons les principales améliorations de Wing par rapport à IDLE :
- L’interface à icônes vous permet d’effectuer la plupart des opérations en un seul clic
- Dans l’éditeur, vous pouvez garder plusieurs fichiers ouverts en même temps, avec une interface à onglets (seul l’actuel, cependant, peut être exécuté)
- Dans l’éditeur les lignes sont numérotées, afin de pouvoir s’y référer plus facilement si Python signale une erreur
- L’application vérifie la syntaxe au fur et à mesure que nous tapons, soulignant les erreurs en rouge comme la correction automatique de Word
- Lors de l’exécution d’un programme, il n’est pas nécessaire de le sauvegarder, donc si nous avons juste besoin d’écrire un exemple simple, nous pouvons le faire “à la volée”
- Nous pouvons facilement configurer nos panneaux, changer leur place, les cacher ou les maximiser
De plus, et c’est la raison pour laquelle je le recommande, Wing 101 facilite grandement le processus de débogage, qui sert à détecter les erreurs dans les programmes, et que nous aborderons dans les prochains paragraphes.
ERREURS DANS LES PROGRAMMES
À mesure que nos programmes deviennent plus longs et plus compliqués, la possibilité de faire des erreurs augmente, ce qui prend généralement beaucoup de temps à corriger. Une vieille blague en informatique est la règle 90-10 suivante : “Faire 90 % du travail prend 10 % du temps, les 10 % restants du travail prennent 90 % du temps.”
Les erreurs en informatique sont généralement divisées en trois catégories :
Les erreurs de syntaxe sont des erreurs qui confondent l’interpréteur Python et l’empêchent de “traduire” notre texte. Des exemples typiques sont les parenthèses non fermantes ou l’oubli de virgules ou de deux-points. Lorsque nous exécutons un programme et que Python trouve une erreur de syntaxe dans le texte, il s’arrête simplement et nous la signale : le programme ne démarre même pas.
Les erreurs d’exécution sont des erreurs qui se produisent lors de l’exécution du programme : l’interpréteur a réussi à traduire notre texte, mais à un moment donné, nous lui avons demandé de faire quelque chose d’illégal. Des exemples typiques sont la division par zéro, l’appel d’une fonction avec de mauvais arguments, l’utilisation d’un nom indéfini ou d’un index qui n’existe pas dans une liste. Lorsque Python rencontre l’une de ces erreurs, il arrête immédiatement le programme et nous le signale à nouveau. Ces erreurs sont divisées en catégories (NameError, TypeError, ValueError …) qui permettent de mieux comprendre le type d’erreur commise.
L’erreur sémantique est la plus sournoise : nous avons demandé à Python quelque chose de parfaitement légitime, mais ce n’est pas ce que nous aimerions qu’il fasse. Cette erreur dénote une erreur dans notre raisonnement ou dans la traduction que nous en avons faite en instructions. Python ne signalera aucune erreur, mais le programme ne fera pas ce que nous attendions de lui.
Alors que les erreurs du premier type sont faciles à corriger, et de plus Python ne nous laisse pas exécuter le programme tant que nous ne les avons pas toutes corrigées, les deux autres types peuvent être très difficiles à trouver, aussi parce qu’ils ne peuvent se produire que dans certaines situations, ce à quoi nous ne nous attendions peut-être pas. Voici quelques exemples:
# Ce programme imprime 10 nombres flottants aléatoires
from random import *
seed()
for i in range(10):
a = randrange(10)
print (10 / a)
Que se passe-t-il dans ce programme ? randrange(10) renvoie un nombre aléatoire entre 0 et 9 : ce code effectue donc 10 divisions parmi lesquelles, aléatoirement, il pourrait y avoir une division par 0. Si nous essayons de lancer le programme plusieurs fois, nous verrons que parfois il crash et autres non. Si nous remplaçons ensuite la troisième ligne par a = randrange (1000), la variable a n’aurait qu’une chance sur 1000 d’être 0, donc le programme fonctionnera presque toujours sans problème mais aura une petite chance de planter avec une erreur.
Voyons une autre erreur :
# Ce programme imprime la table de 3 fois pour i dans l'intervalle (10) : print ("3 x", je, "=", 3 * je)
C’est une erreur sémantique : on a oublié que si on écrit pour i dans l’intervalle (10) : i il variera de 0 à 9, donc on n’imprimera pas 3 x 1 = 3 … 3 x 10 = 30 mais 3 x 0 = 0. .. 3 x 9 = 27.
LE DÉBUGAGE
Une grande aide pour trouver des erreurs dans les programmes vient du débogueur :
Le débogueur est une application qui vous permet d’exécuter notre programme en mode “protégé”. Il est notamment possible :
Exécutez le programme pas à pas, c’est-à-dire une ligne à la fois
Vérifier la valeur des variables à tout moment
Le débogage est précisément le processus de suppression des erreurs à l’aide de ce mode protégé (rappelez-vous que bug en anglais signifie “insecte” ou “puce”) : une fois que nous avons vérifié qu’un programme nous donne des erreurs dont nous ne pouvons pas comprendre l’origine, nous commencerons à l’exécuter un ligne à la fois en vérifiant calmement ce qui se passe dans le code.
Le débogueur était également autrefois une application distincte, mais il est maintenant intégré à tous les IDE. Dans Wing 101, il est accessible via les icônes plus à droite dans la barre d’outils supérieure : voyons les possibilités qu’il nous offre :
Clé | Signification | Exemple |
Déboguer | Démarrez le mode de débogage. Le programme démarrera et s’exécutera jusqu’au premier point d’arrêt (voir ci-dessous), où il s’arrêtera : dans l’éditeur, la ligne courante sera surlignée en rouge. | |
Stop | Quittez immédiatement le mode débogage. Le programme s’arrêtera et il sera possible de le redémarrer (à partir de zéro) en mode débogage ou exécution normale. Si lors du débogage, nous trouvons une erreur et la corrigeons, nous devons toujours nous rappeler d’arrêter le mode de débogage avec cette clé et de recommencer. | |
Step into | Exécute une seule ligne de code. Si la ligne contient un appel à une fonction “jump into” le code de la fonction nous montrant son exécution : par exemple, si on appuyait sur cette touche sur une ligne qui contient un print() , on rentrerait le code Python de la fonction (dont on comprendrait sans doute Très peu…). Cette touche peut également être utilisée pour démarrer le programme en mode débogage : l’exécution s’arrêtera à la première ligne de code. | |
Step over | Semblable au précédent, il exécute une seule ligne de code, mais n’entre pas dans les fonctions. Pour le moment, nous utiliserons toujours cette touche pour exécuter le programme pas à pas : nous verrons la ligne rouge surlignée se déplacer suite à l’exécution du programme, et après chaque étape, nous pourrons vérifier de nombreuses informations dans les panneaux sur droite (voir ci-dessous). | |
Step out | Quitte une fonction. |
Au cours de l’exécution pas à pas, nous pouvons inspecter la valeur de toutes nos variables : il suffit de déplacer le pointeur de la souris sur le nom d’une variable et d’attendre un instant : une info-bulle avec la valeur de notre variable apparaîtra.
Pour activer et désactiver un point d’arrêt, cliquez simplement à gauche d’une ligne. Lorsque nous lançons le programme avec la clé de débogage, il s’arrêtera à la ligne indiquée.
Per il momento vi consiglio di procedere così: fate partire il programma con lo step into, ed il debugger si fermerà sulla prima linea di codice che viene eseguita. Continuate poi con lo step over per non “entrare” dentro le funzioni di Python, che hanno un codice troppo complicato. Se per sbaglio vi dovesse succedere, potete ritornare al vostro programma premendo lo step out (a volte è necessario premerlo più volte.
DÉBOGAGE AVEC IDLE
Ce paragraphe est dédié aux “purs et durs” qui ne veulent absolument pas utiliser de programmes commerciaux, même s’ils sont gratuits. En fait, IDLE a également un débogueur intégré, mais c’est plutôt gênant car il ouvre une troisième fenêtre à l’écran. Cliquez sur l’élément de menu Debug => Debugger et cette fenêtre s’ouvrira :
Les cinq boutons en haut à gauche sont l’équivalent de ceux de Wing 101. Assurez-vous de bien cocher la case source (sinon vous ne verrez pas la progression de votre programme dans l’éditeur).
Lancez maintenant le programme normalement (toujours dans l’éditeur) et vous verrez que l’exécution s’arrêtera sur la première ligne. Vous pouvez continuer à utiliser la touche over pour exécuter les instructions pas à pas : dans la zone de la fenêtre de débogage, vous verrez la valeur de vos variables (y compris certaines variables Python internes dont vous ne connaissez pas la signification pour le moment). Cependant, vous devrez “gérer” les trois fenêtres : l’éditeur pour visualiser votre programme, le shell d’E/S et le débogueur pour exécuter les lignes.
UNE ALTERNATIVE EN LIGNE
Il existe également des sites qui vous permettent d’exécuter du code Python en ligne. L’un d’eux est Pythontutor. L’interface dispose d’une fenêtre dans laquelle vous pouvez copier et coller votre code, et d’un bouton “Visualiser l’exécution” pour lancer le programme. À ce stade, une autre fenêtre s’ouvrira avec différentes clés : vous pouvez exécuter une ligne à la fois et voir les valeurs des variables dans une autre case. Notez que toutes les fonctions Python ne sont pas prises en charge (certains modules ne seront pas importés).