Les erreurs de codage sont inévitables. Vous pouvez suivre les deux méthodes de base suivantes pour déterminer l'emplacement de ces erreurs dans le code :
- ajouter des instructions d'impression au code pour vous aider à identifier le problème,
- utiliser un débogueur interactif.
Utilisation d'instructions d'impression
La première méthode, à la fois courante et évidente, consiste à utiliser des instructions d'impression pour localiser des bogues. Comme les outils de script ont accès à la boîte de dialogue de progression des outils, vous pouvez modifier le script en y incluant des appels à AddMessage(), AddWarning() ou AddError() de manière à imprimer des valeurs et des messages de point de contrôle dans la boîte de dialogue de progression. Vous pouvez également utiliser une méthode indépendante pour renvoyer des messages, par exemple la méthode MessageBox du module win32ui. Cette méthode affiche une boîte de dialogue contextuelle. Comme vous devez cliquer sur OK dans la boîte de dialogue pour poursuivre l'exécution, cette méthode vous permet d'exécuter pas à pas le script. Ces deux méthodes sont reprises dans l'exemple ci-dessous :
import arcpy
import win32ui
import win32con
n = 5
# Print message to progress dialog
#
arcpy.AddMessage("Value of n = {}".format(n))
# Issue a popup dialog with OK and Cancel button
#
val = win32ui.MessageBox("Value of n = {}".format(n), "title",
win32con.MB_OKCANCEL)
# Based on the button clicked, you can branch execution
#
if val == 1:
arcpy.AddMessage("You clicked OK")
else:
arcpy.AddError("You clicked Cancel")
raise arcpy.ExecuteError, "Execution stops due to Cancel button click"
arcpy.AddMessage("This statement reached")
Utilisation de débogueurs
La seconde méthode consiste à utiliser un environnement de développement intégré (IDE) Python prenant en charge le débogage. Les débogueurs vous permettent de définir des points d'arrêt, d'exécuter pas à pas des lignes de code individuelles et d'examiner le contenu de variables, le tout sans modifier votre code. Comparé à l'ajout d'instructions d'impression, les débogueurs sont beaucoup plus efficaces et vous permettent généralement d'identifier rapidement un bogue.
Voici quelques exemples d'IDE courants :
- l'IDE Python installé avec Python,
- PythonWin, disponible sur Web à l'adresse https://sourceforge.net/projects/pywin32,
- PyScripter, disponible sur le Web à l'adresse http://code.google.com/p/pyscripter,
- des systèmes commerciaux, comme l'IDE Wing disponible sur le site Webhttp://wingware.com.
Vous pouvez utiliser un débogueur de différentes manières. L'une d'elles consiste à ouvrir directement votre script dans l'IDE, à le modifier en affectant des valeurs à tous les paramètres et à commencer le débogage. Cette méthode fonctionne raisonnablement bien dans les cas peu complexes. Si toutefois si votre script utilise des paramètres pour les couches ou les vues tabulaires, ces variables doivent alors être créées instantanément. Des paramètres complexes, comme un appariement de champs ou une référence spatiale, sont difficiles à créer en tant que variables.
Vous souhaitez idéalement pouvoir ouvrir la boîte de dialogue de votre outil de script, entrer des paramètres et lancer un IDE avec votre code prêt à être débogué. Vous pouvez procéder de cette manière en apportant quelques modifications simples, comme indiqué ci-dessous.
Utiliser GetParameterAsText()
La première étape consiste à modifier votre script de sorte qu'il utilise GetParameterAsText() à la place de sys.argv[], comme indiqué dans Présentation des paramètres des outils de script. Vous pouvez conserver cette modification : il n'est pas nécessaire de remodifier votre code pour qu'il utilise de nouveau sys.argv[].
Exécuter et déboguer votre outil
- Définissez Débogueur (PythonWin, par exemple) dans Géotraitement > Options de géotraitement.
- Dans la fenêtre Catalogue, cliquez avec le bouton droit sur votre outil et cliquez sur Déboguer.
- Ouvrez l'outil de script à partir de la boîte à outils, entrez tous les paramètres que vous souhaitez définir, puis cliquez sur OK. L'IDE peut mettre quelques instants à s'ouvrir. Votre code de script s'affiche et vous êtes alors en mesure d'interagir avec l'application de débogage comme vous le feriez normalement.
Vous pouvez définir un point d'arrêt, laisser le script s'exécuter jusqu'à ce point d'arrêt, puis utiliser d'autres options proposées par le débogueur. Les valeurs des paramètres que vous avez entrées dans la boîte de dialogue sont extraites par GetParameterAsText().
Lors de l'exécution du script, toute interaction à laquelle vous vous attendriez normalement entre le script et l'application continuera à se produire. De cette manière, si vous utilisez des fonctions comme AddMessage(), AddWarning() ou AddError(), ces messages s'afficheront dans l'application. Si vous utilisez des fonctions de progression, l'indicateur de progression est alors mis à jour dans la boîte de dialogue de l'outil à mesure que vous parcourez votre script. Une fois arrivé à la fin du script, vous pouvez revenir à l'application en fermant le débogueur. Si vous projetez de déboguer votre outil de script une deuxième fois, vous avez également la possibilité de laisser le débogueur ouvert en cliquant sur Annuler dans la boîte de dialogue de progression de l'outil.