Déboguer dans PyneIDE
Arrêtez le programme à un point d’arrêt et vérifiez ses variables bougie par bougie.
Un code peut respecter les règles du langage tout en calculant autre chose que ce que vous vouliez. Le débogueur permet d’arrêter l’exécution, d’examiner les variables et de suivre les instructions une à une.
Vous étudierez ici l’écart entre la clôture et une moyenne mobile sur cinq bougies. Vous prévoirez d’abord le résultat, puis observerez ce que le programme a calculé.
Trois sortes d’erreurs
Une erreur de syntaxe enfreint les règles d’écriture du code : deux-points manquants ou mauvaise indentation, par exemple. L’éditeur la signale souvent dès la saisie.
Une erreur d’exécution survient pendant le fonctionnement du programme, par exemple lorsqu’on lit un indice de tableau sans élément correspondant. L’exécution peut alors s’arrêter avec un message d’erreur.
Une erreur de logique peut laisser le programme s’exécuter. Écrire average - close au lieu de close - average inverse le signe du résultat. Les règles du langage ne l’interdisent pas : vous devez comparer le résultat à l’objectif.
La vue View → Problems de Visual Studio Code regroupe les problèmes signalés par l’éditeur. Cliquez sur une ligne pour aller à l’emplacement concerné. Lisez le message détaillé avant de modifier plusieurs lignes.
Un programme à examiner
Créez debug_average.py :
"""
@pyne edge
"""
from pynecore import Series
from pynecore.lib import bar_index, close, color, log, plot, script, ta
@script.indicator("Average Distance", overlay=False)
def main():
average: Series[float] = ta.sma(close, 5)
gap = close - average
if bar_index == 10:
log.info("close={0}, average={1}, gap={2}", close, average, gap)
plot(gap, "Distance", color=color.blue)bar_index est le numéro de la bougie traitée, en commençant par zéro. L’indice 10 désigne la onzième bougie. L’appel au journal n’écrit donc qu’une fois dans cette exécution historique.
log.info produit un message formaté. Les trois valeurs qui suivent remplacent {0}, {1} et {2}, dans cet ordre. Le système de journalisation interprète le texte contenant ces emplacements numérotés.
Exécutez le programme une fois avec Run Pyne code. La ligne doit être positive quand la clôture est au-dessus de la moyenne. Sur les quatre premières bougies, la moyenne et l’écart sont manquants.
S’arrêter avant une ligne donnée
- Cliquez à gauche du numéro de la ligne
plot(gap, ...). Le symbole du point d’arrêt apparaît. - Cliquez sur Debug au-dessus du code.
- Si un sélecteur de données apparaît, choisissez
demo. - Le programme s’arrête au point d’arrêt. Ouvrez la vue Run and Debug.
Un point d’arrêt est un emplacement où le débogueur suspend le programme. La ligne sélectionnée n’a pas encore été exécutée. Vous pouvez déjà examiner le résultat des affectations précédentes.
Le premier arrêt peut se produire à la première bougie. gap y est manquant, faute de fenêtre complète de cinq bougies. Le débogueur montre cette situation ; cette absence n’est pas à elle seule une erreur.
Atteindre une bougie après l’initialisation
Dans la barre d’outils flottante du débogage, Next Bar passe à la bougie suivante. Survolez les icônes pour lire leur nom. Trouvez Run to Bar…, cliquez dessus, saisissez 10 dans le champ et appuyez sur Enter.
À la onzième bougie, la fenêtre de cinq valeurs est complète. Dans Variables, trouvez average et gap. Le groupe Pyne permet de vérifier les données de la bougie traitée, notamment bar_index et close.

average est une variable Series : le code peut donc utiliser sa valeur précédente avec average[1]. Cette valeur n’est pas forcément identique à la moyenne actuelle, car la fenêtre a avancé d’une bougie.
Les expressions surveillées
La partie Watch permet d’ajouter une expression à voir à chaque arrêt. Essayez :
close
close[1]
average
close - averageclose[1] est la clôture précédente par rapport à la bougie arrêtée. average est votre variable. close - average doit donner la même valeur que le gap déjà calculé.
Surveillez des variables et des calculs simples. N’ajoutez pas dans Watch un appel à ta.sma, une opération passant un ordre ou un appel modifiant un tableau. L’observation ne doit pas changer l’état du programme.
Ligne par ligne et bougie par bougie
Step Over passe à l’instruction suivante sans entrer dans les détails d’une fonction appelée. Step Into peut entrer dans votre fonction. Continue reprend jusqu’au prochain arrêt ; Disconnect ferme la connexion du débogueur et termine le débogage.
Next Bar change d’échelle en passant à la bougie suivante. Le pas-à-pas par ligne détaille le calcul d’une bougie ; celui par bougie montre l’évolution du résultat dans le temps.
Le traitement de la bougie arrêtée n’est pas terminé : le graphique peut afficher l’état précédemment achevé. Vérifiez l’indice et les données actuels dans le groupe Pyne.
Avant de lire une variable, observez la ligne sélectionnée. Si l’affectation vient après, la variable ne contient pas encore le résultat attendu.
Trouver une erreur de signe
Arrêtez le débogueur. Modifiez la ligne ainsi :
gap = average - closeRelancez le débogage et rejoignez la même bougie. Si le prix est au-dessus de la moyenne, gap sera négatif alors que l’objectif demandait un écart positif.
Dans Watch, close - average conserve le sens initial recherché. La comparaison fait immédiatement apparaître la différence. Rétablissez la soustraction correcte et vérifiez à nouveau la même bougie.
À vous de jouer
Ajoutez une variable previous_close = close[1] et examinez-la dans le débogueur. À l’indice 10, de quelle bougie doit-elle contenir la clôture ? Quelle est sa valeur à la toute première bougie ?
Solution de l’exercice
previous_close = close[1]À la bougie 10, elle donne la clôture de la bougie 9. À la première, d’indice 0, elle est manquante puisqu’il n’existe pas de bougie précédente dans le fichier.
Placez la ligne avant le point d’arrêt pour qu’elle soit déjà exécutée à l’arrêt. Après la vérification, vous pouvez retirer cette variable auxiliaire et la ligne de journalisation utilisée seulement pour le contrôle.
Bien décrire une erreur
Pour demander de l’aide, précisez le fichier, les données utilisées, les inputs effectifs et l’instant de la bougie examinée. Indiquez les valeurs attendue et obtenue. Au lieu de « la ligne est incorrecte », écrivez par exemple : « à cette bougie, la clôture vaut 101, la moyenne 100, mais l’écart donne −1 ». Le calcul peut alors être vérifié.