Exibindo mensagens de erro levantadas para o usuário na janela ArcGIS Geoprocessing Results?

13

As instruções de impressão geradas a partir de uma exceção personalizada podem ser exibidas na janela Resultados do Geoprocessamento?

Modifiquei um script que encontrei que recebe duas entradas de um usuário, localiza o recurso associado e, em seguida, aumenta o zoom para o recurso. A ferramenta funciona bem. Estou tentando torná-lo mais amigável, formatando automaticamente as entradas para ter a quantidade correta de caracteres. Eu adicionei uma caixa de mensagens que informa ao usuário se eles têm muitos caracteres na caixa de entrada, mas usei o easygui para criar isso (uma biblioteca Python para GUIs). Em vez disso, gostaria de usar a janela de resultados gp para exibir a mensagem. Eu pensei que havia formatado as instruções raise e except corretamente, mas a ferramenta é executada e recebo um resultado completo e não minha mensagem de erro. Eu tentei a ajuda do arcry da esri e não obtive os resultados que estava procurando.

class BadInputError(Exception):
    pass

# Import arcpy module
import arcpy, sys, string
from arcpy import env

try:
    def checkInput(inp):
        mNCount = len(inp)
        trigger = 0
        while trigger == 0:
            if  mNCount == 4:
                trigger = 1
            elif mNCount > 4:
                inp = ''
                trigger = -1
                raise BadInputError
            elif mNCount == 3:
                inp = '0' + inp
                trigger = 1
            elif mNCount == 2:
                inp = '00' + inp
                trigger = 1
            elif mNCount == 1:
                inp = '000' + inp
                trigger = 1
        return inp


    # Script arguments
    MapNumber = arcpy.GetParameterAsText(0)
    MapNumber = checkInput(MapNumber)
    ParcelNumber = arcpy.GetParameterAsText(1)
    ParcelNumber = checkInput(ParcelNumber)

    Expression = (""" "MAP" = '%s' AND "PARCEL" = '%s'""") %(MapNumber,ParcelNumber)

    # Local variables:
    GISData_GISDATA_CAD_PARCEL2009_WHOLE = "Database Connections\\GISUser.sde\\GISData.GISDATA.CAD_PARCEL2009_WHOLE"
    Output_Layer_Name = Expression
    Output_Layer = "ParcelSelection"

    # Process: Select Layer By Attribute
    arcpy.SelectLayerByAttribute_management("2009 Parcel Points", "NEW_SELECTION", Expression)

    # Zoom to Selected Features
    mxd = arcpy.mapping.MapDocument('CURRENT') 
    df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0] 
    df.zoomToSelectedFeatures()
    df.scale = 8000
    arcpy.RefreshActiveView()

except BadInputError:
    print "Too many characters.  Run again"

except Exception, e:
    # If an error occurred, print line number and error message  
    import traceback, sys
    tb = sys.exc_info()[2]
    print "Line %i" % tb.tb_lineno
    print e.message
Joe
fonte

Respostas:

13

Eu acho que você está procurando arcpy.AddMessage .

As quatro funções do ArcPy para escrever mensagens são as seguintes:

  • AddMessage ("message") - Para mensagens informativas gerais (gravidade = 0).
  • AddWarning ("message") - Para aviso (gravidade = 1).
  • AddError ("message") - por erros (gravidade = 2).
  • AddIDMessage (MessageType, MessageID, AddArgument1, AddArgument2) - Usado para erros e avisos (o argumento MessageType determina a gravidade).
Derek Swingley
fonte
1
É isso. Obrigado. Eu acho que eu vou usar arcpy.AddError
joe