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:

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.

Result properties and methods

Properties and methods

Explanation

inputCount

Returns the number of inputs.

outputCount

Returns the number of outputs.

messageCount

Returns the number of messages.

maxSeverity

Returns the maximum severity. The returned severity can be 0 (no errors/warnings raised), 1 (warnings raised), or 2 (errors raised).

resultID

Returns the unique result ID. If the tool is not a geoprocessing service, the resultID will be "".

status

Returns the status of the job on the server.

  • 0—New
  • 1—Submitted
  • 2—Waiting
  • 3—Executing
  • 4—Succeeded
  • 5—Failed
  • 6—Timed Out
  • 7—Canceling
  • 8—Canceled
  • 9—Deleting
  • 10—Deleted

cancel()

Cancels the job on the server.

getInput(index)

Returns a given input. If a record set or raster data object, a RecordSet or RasterData object is returned.

getMapImageURL(ParameterList, Height, Width, Resolution)

Get map service image for a given output.

getMessage(index)

Returns a specific message.

getMessages(severity)

The type of messages to be returned: 0=message, 1=warning, 2=error. Not specifying a value returns all message types.

getOutput(index)

Returns a given output. If a record set or raster data object, a RecordSet or RasterData object is returned.

getSeverity(index)

Returns the severity of a specific message.

Result properties and methods

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()

Temas relacionados

5/9/2014