Gestion des erreurs dans les outils de script

Les notions de base de la gestion d'erreurs Python sont présentées dans la rubrique Gestion des erreurs avec Python. Le document Python.org Erreurs et exceptions contient des informations plus détaillées.

Obtention de messages d'erreur à partir d'un objet Result

Ci-dessous figure une brève présentation de l'objet de résultat :

result = arcpy.GetCount_management("c:/data/rivers.shp")

Si l'appel de GetCount déclenche une exception, l'objet de résultat est nul. Cela signifie que vous ne pouvez pas récupérer de messages d'erreur de l'objet de résultat.

import arcpy
try:
    result = arcpy.GetCount_management("c:/data/rivers.shp")

# Return GEOPROCESSING specific errors
# (this method is INCORRECT!)
except:
    arcpy.AddError(result.getMessages(2))

Le code ci-dessus échoue et affiche le message "nom 'résultat' n'est pas défini". Ceci est dû au fait que l'objet de résultat n'a pas pu être créé en raison de l'échec de l'outil. Comme aucun objet de résultat n'est créé, une erreur Python est déclenchée lors de la tentative d'utilisation de la méthode getMessages.

RemarqueRemarque :

Un objet de résultat créé en appelant un service de géotraitement ArcGIS Server est créé même en cas d'échec d'outil. La création d'un objet de résultat n'échoue que lorsqu'un outil est exécuté localement et déclenche une erreur. Pour plus d'informations sur l'utilisation d'un objet de résultat, reportez-vous à la rubrique Obtention de résultats à partir d'un outil de géotraitement.

Utilisation d'AddReturnMessage pour conserver des liaisons vers des codes d'erreur

Les numéros d'erreur de géotraitement affichés dans la boîte de dialogue de progression sont des hyperliens menant vers une page d'aide qui comporte des informations détaillées sur l'erreur. Pour activer les hyperliens pour les erreurs signalées dans votre script, utilisez la fonction AddReturnMessage au lieu de la fonction AddError, en procédant comme suit :

import arcpy
try:    
    result = arcpy.GetCount_management("c:/data/rivers.shp")

except:    
    # Return Geoprocessing tool specific errors
    #
    for msg in range(0, arcpy.GetMessageCount()):
        if arcpy.GetSeverity(msg) == 2:
            arcpy.AddReturnMessage(msg)

7/10/2012