Comprender los tipos de mensajes y su severidad

Durante la ejecución de una herramienta, se escriben mensajes que se pueden recuperar con las funciones de geoprocesamiento, como GetMessages. Estos mensajes incluyen información como la siguiente:

  • Cuándo se inició y finalizó la operación
  • Los valores de parámetro utilizados
  • Información general sobre el progreso de la operación (mensaje de información)
  • Advertencias sobre posibles problemas (mensaje de advertencia)
  • Errores que hacen que se detenga la ejecución de la herramienta (mensaje de error)

Toda la comunicación entre las herramientas y los usuarios se realiza a través de mensajes. Según desde dónde está ejecutando las herramientas, los mensajes aparecen en la ventana Resultados, en la ventana de Python y en el cuadro de diálogo de progreso. Desde Python, puede recuperar estos mensajes dentro de la secuencia de comandos, consultarlos, imprimirlos o escribirlos en un archivo. Todos los mensajes tienen una propiedad de severidad, ya sea informativa, de advertencia o de error. La severidad es un entero donde 0 = informativo, 1 = advertencia y 2 = error.

GravedadDescripción

Mensaje informativo (severidad = 0)

Un mensaje informativo es información sobre la ejecución de una herramienta. Nunca se utiliza para indicar problemas. En los mensajes informativos se encuentra solamente información general, como el progreso de una herramienta, a qué hora se inició o finalizó una herramienta, características de los datos de salida o los resultados de la herramienta.

Mensaje de advertencia (severidad = 1)

Los mensajes de advertencia se generan cuando una herramienta experimenta una situación que puede causar un problema durante su ejecución o cuando es posible que el resultado no sea el que espera. Por ejemplo, definir un sistema de coordenadas para un dataset que ya tiene un sistema de coordenadas definido genera una advertencia. Puede realizar alguna acción cuando se devuelve una advertencia, como cancelar la ejecución de la herramienta o realizar otra elección de parámetro.

Mensaje de error (severidad = 2)

Los mensajes de error indican un evento crítico que impidió que se ejecutara una herramienta. Los errores se generan cuando uno o más parámetros tienen valores no válidos o cuando falla una rutina o un proceso de ejecución crítico.

Los mensajes de advertencia y de error están acompañados de un código de Id. de seis dígitos. Estos códigos de Id. se documentaron para proporcionar información adicional sobre sus causas y la forma en la que se pueden solucionar. Cuando se muestran códigos de error o de advertencia en la herramienta o en el cuadro de diálogo de progreso, la ventana de Python o la ventana Resultado, tienen un vínculo que permite ir directamente a ayuda adicional para ese mensaje.

Obtener mensajes

ArcPy mantiene los mensajes de la última herramienta ejecutada, que se pueden recuperar mediante la función GetMessages. Esta función devuelve una sola cadena de caracteres que contiene todos los mensajes de la herramienta que se ejecutó en último lugar. Los mensajes que se devolvieron se pueden filtrar para que incluyan solamente aquellos con una determinada severidad mediante la opción severidad. Cuando utiliza ArcPy, el primer mensaje proporciona la herramienta que se ejecutó y el último mensaje proporciona el tiempo transcurrido y de finalización para la ejecución de la herramienta. El segundo y el último mensaje de la herramienta siempre proporcionan la hora de inicio y de finalización, respectivamente, de la ejecución de la herramienta.

Obtener mensajes de geoprocesamiento
import arcpy
# Execute the GetCount tool
arcpy.GetCount_management("c:/base/data.gdb/roads") 
# Get the resulting messages and print them
print(arcpy.GetMessages())

Los mensajes individuales se pueden recuperar con la función GetMessage. Esta función tiene un parámetro, que es la posición de índice del mensaje. La función GetMessageCount devuelve el número de mensajes de la última herramienta ejecutada. El siguiente ejemplo muestra cómo imprimir la información sobre qué herramienta se ha ejecutado junto con el tiempo transcurrido y la hora de finalización para la herramienta.

import arcpy
arcpy.env.workspace = "D:/base/data.gdb"
arcpy.Clip_analysis("roads", "urban_area", "urban_roads")
# Print the first message
print(arcpy.GetMessage(0))
# Print the last message - ending and elapsed times for tool
print(arcpy.GetMessage(arcpy.GetMessageCount - 1))

Obtener mensajes desde un objeto de resultado

También se puede acceder a los mensajes desde una herramienta con un objeto Result. A diferencia de la obtención de mensajes desde ArcPy, los mensajes en un objeto Result se pueden mantener incluso después de ejecutar varias herramientas. El objeto Result es compatible con varias de las mismas funciones que se utilizaron para obtener e interpretar los mensajes de las herramientas de geoprocesamiento.

Propiedades y métodos de Result

Propiedades y métodosExplicación

inputCount

Devuelve la cantidad de entradas.

outputCount

Devuelve la cantidad de salidas.

messageCount

Devuelve la cantidad de mensajes.

maxSeverity

Devuelve la severidad máxima. La severidad que se devuelve puede ser 0 (no se encontraron errores/advertencias), 1 (se encontraron advertencias) o 2 (se encontraron errores).

resultID

Devuelve el Id. de resultado único. Si la herramienta no es un servicio de geoprocesamiento, resultID será "".

status

Devuelve el estado del trabajo en el servidor.

  • 0: Nuevo
  • 1: Enviado
  • 2: Esperando
  • 3: En ejecución
  • 4: Correcto
  • 5: Falló
  • 6: Se agotó el tiempo de espera
  • 7: Cancelando
  • 8: Cancelado
  • 9: Eliminando
  • 10: Eliminado

cancel()

Cancela el trabajo en el servidor.

getInput(index)

Devuelve una entrada dada. Si es un conjunto de registros o un objeto de datos ráster, se devuelve un objeto RecordSet o RasterData.

getMapImageURL(ParameterList, Height, Width, Resolution)

Obtiene una imagen de servicio de mapas para una salida determinada.

getMessage(index)

Devuelve un mensaje específico.

getMessages(severity)

El tipo de mensajes que se devuelve: 0=mensaje, 1=advertencia, 2=error. Al no especificar un valor se devuelven todos los tipos de mensaje.

getOutput(index)

Devuelve una salida dada. Si es un conjunto de registros o un objeto de datos ráster, se devuelve un objeto RecordSet o RasterData.

getSeverity(index)

Devuelve la severidad de un mensaje específico.

Propiedades y métodos de Result

El siguiente ejemplo ejecuta dos herramientas de geoprocesamiento pero espera hasta que se ejecuten las herramientas antes de revisar los mensajes.

import arcpy
arcpy.env.workspace = "D:/base/data.gdb"
# Execute the Clip and GetCount tools
clipResult = arcpy.Clip_analysis("roads", "urban_area", "urban_roads")
countResult = arcpy.GetCount_management("urban_roads")
# Get the resulting messages and print them
print(clipResult.getMessages())
print(countResult.getMessages())

Como ocurre con las herramientas de geoprocesamiento, los mensajes de la herramienta del servidor se clasifican como información, advertencia o error. El tipo de mensaje está indicado por la propiedad de severidad, que es un valor numérico. El siguiente ejemplo muestra cómo obtener los mensajes desde una herramienta de servidor después de que haya finalizado.

import arcpy
import time
# Add the server toolbox
arcpy.ImportToolbox("http://lab13/arcgis/services;BufferByVal", "mytools")
featset = arcpy.FeatureSet()
featset.load("//flames/gpqa/coredata/global/redlands/control.shp")
# Run a server tool named BufferPoints
result = arcpy.BufferPoints_mytools(featset, "1000 feet")
# Wait until the tool completes
while result.status < 4:
    time.sleep(0.2)
# Print all messages from the result object
print(result.getMessages())