8 votos

secuencia de comandos de python error - con GetParameterAsText

Tengo un aparentemente simple código que se repite a través de una lista de clases de entidad y calcula el campo ID de la tabla de atributos que es igual a los 5 primeros caracteres de función nombre de la clase. El script funciona bien si me codificar el área de trabajo. Tan pronto como lo puedo cambiar a "recibir como Parámetro el Texto" recibo este error:

ERROR 000539: Error al ejecutar la expresión: expresión : nombre de la 'expresión' no está definido No se pudo ejecutar (CalculateField).

La secuencia de comandos es:

import arcpy, sys, array, time, datetime

#Get feature dataset
inws = arcpy.GetParameterAsText(0)

#Set geoprocessing environments
arcpy.env.workspace = inws
arcpy.env.overwriteOutput = True

#Iterate through the list of feature classes

fcList = arcpy.ListFeatureClasses()

for fc in fcList:
    print str("processing" + fc)

#Define field and expression
field = "SID"
expression = str(fc[:5])

#Create a new field name and expression
arcpy.AddField_management(fc, field, "TEXT")
arcpy.CalculateField_management(fc, field, "expression", "PYTHON")

¿alguien sabe qué está pasando aquí? Gracias!

4voto

Prachur Puntos 111

Veo dos problemas. En primer lugar, la forma en que la sangría no iterar a través de la featureclasses y realizar el proceso en cada uno, se acaba de recorrer y de impresión, la impresión de la declaración. Segundo, la expresión debe ser construido con comillas alrededor de él (al menos ese es el caso de VB sintaxis) y se denomina como una variable y no una cadena.

Intente lo siguiente:

import arcpy, sys, array, time, datetime

#Get feature dataset
inws = arcpy.GetParameterAsText(0)

#Set geoprocessing environments
arcpy.env.workspace = inws
arcpy.env.overwriteOutput = True

#set the field name
field = "SID"

#Iterate through the list of feature classes   
fcList = arcpy.ListFeatureClasses()  
for fc in fcList:
    print str("processing" + fc)

    #Define expression
    expression = "\"" + fc[:5] + "\""

    #Create a new field name and expression
    arcpy.AddField_management(fc, field, "TEXT")
    arcpy.CalculateField_management(fc, field, expression)

Tenga en cuenta que se llevó a cabo el "PYTHON" opción en CalculateField... yo por lo general uso el valor predeterminado de VB sintaxis para operaciones simples, así que creo que esto debería funcionar.

También, tocando en lo que R. K. estaba diciendo acerca de GetParameterAsText(0) no se les ha asignado un valor, estoy asumiendo que usted está ejecutando este como una herramienta de secuencia de comandos en ArcMap en la que hemos trazado una entrada para asignar a los Parámetros(0). Se debe trabajar en este caso si la entrada está asignada como área de trabajo, de lo contrario, si no está funcionando como una herramienta de secuencia de comandos, (s)él es, necesidades de la entrada.

2voto

Jon Puntos 21

En general, usted debe captura de excepciones. De lo contrario no sabemos de donde las cosas van mal y cómo manejar un comportamiento inesperado. Algo más: tenga en cuenta que si su área de trabajo termina con un solo \ python interpretar esto como un escape que se traducirá en una ruta no válida.

Para asegurar que usted siempre tiene un área de trabajo válido hacer:

if inws[-1:] != '\\':
    inws += '\\'

Para el manejo de excepciones:

try:
    #Set geoprocessing environments
    arcpy.env.workspace = inws
    arcpy.env.overwriteOutput = True

except:
   msg = arcpy.getmessages()
   raise Exception(msg)
   ...

1voto

shsteimer Puntos 8749

El error es más probable que con la última línea.

arcpy.CalculateField_management(fc, field, "expression", "PYTHON")

Debe ser la variable expression y no la cadena "expression" como @PolyGeo señaló.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X