Comprender los tipos de mensajes y su severidad
Durante la ejecución de una herramienta, se escriben mensajes que se pueden recuperar con 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.
Severidad | |
---|---|
Mensaje informativo (severidad = 0) |
Un mensaje informativo es simplemente eso: información sobre la ejecución. 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, tal 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 el cuadro de diálogo de progreso o de la herramienta, la ventana de Python o la ventana Resultado, tienen un vínculo que permite ir directamente a la ayuda adicional para ese mensaje.
Obtener mensajes
ArcPy mantiene los mensajes de la última herramienta que se ejecutó y 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() # The returned messages would look similar to the following: # Executing: GetCount c:/base/data.gdb/roads # Start Time: Wed Apr 07 11:28:21 2010 # Row Count = 373 # Succeeded at Wed April 07 11:28:21 2010 (Elapsed Time: 0.00 seconds)
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 la cantidad de mensajes de la última herramienta que se ejecutó. El siguiente ejemplo muestra cómo imprimir la información sobre qué herramienta se ejecutó junto con las horas transcurridas y 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 - tool executed # 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 de Resultado. A diferencia de obtener mensajes desde ArcPy, los mensajes en un objeto de Resultado se pueden mantener incluso después de ejecutar varias herramientas. El objeto de Resultado 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 |
Explicació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. único resultante. Si la herramienta no es un servicio de geoprocesamiento, el resultID será "". |
status |
Devuelve el estado del trabajo en el servidor.
|
cancel() |
Cancela el trabajo en el servidor. |
getInput(índice) |
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) |
Obtener 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(índice) |
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(índice) |
Devuelve la severidad de un mensaje específico. |
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()
De la misma forma que con las herramientas de geoprocesamiento, los mensajes de la herramienta del servidor se clasifican en información, una advertencia o un 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()