4 votos

arcpy.CalculateField_management no reconoce la variable en bloque de código

He encontrado una útil calculadora de campo bloque de código que estoy tratando de agregar a una costumbre herramienta de python. Funciona muy bien en el manual de la calculadora de campo; sin embargo, cuando se inserta en el bloque de código de texto para ser utilizado como un script, me sale "NameError: name 'fc' no está definido". Al parecer, el script no está viendo mi variable. Mi pregunta entonces es: ¿Cómo puedo obtener la variable dentro del bloque de código?

He intentado todo lo que puedo pensar, incluyendo pero no limitado a la configuración de 'fc' como global, escapar 'fc' en el bloque de código de la cadena, y la definición de 'filas' fuera del bloque de código, pero me parecen llegar a ninguna parte. Me siento como que me falta algo obvio, pero yo estoy fuera de ideas para el día de hoy. A continuación es mi código y el error:

import arcpy

fc=arcpy.GetParameterAsText(0)

DupNumCode="""uniquelist = {}
rows = arcpy.SearchCursor(fc)
for row in rows:
  value = row.getValue('SpatialID')
  if value not in uniquelist:
    uniquelist[value] = 1
  else:
    uniquelist[value] = uniquelist[value] + 1

def findIncidence(inValue):  
  return uniquelist[inValue]"""

DupNumExpression="findIncidence(!SpatialID!)"

arcpy.CalculateField_management(fc, "DupNum", DupNumExpression, "PYTHON", DupNumCode)

Me sale lo siguiente:

ExecuteError: ERROR 000539: Runtime error 
Traceback (most recent call last):
  File "<string>", line 2, in <module>
NameError: name 'fc' is not defined

Failed to execute (CalculateField).

Aquí está mi configuración de los parámetros:

enter image description here

2voto

Gavin Schulz Puntos 592

Su fc no está definida en el bloque de código. Usted puede pasar al bloque de código utilizando el formato de cadena:

DupNumCode = """uniquelist = dict()
fc = {0}
rows = arcpy.SearchCursor(fc)
for row in rows:
  value = row.getValue('SpatialID')
  if value not in uniquelist:
    uniquelist[value] = 1
  else:
    uniquelist[value] = uniquelist[value] + 1

def findIncidence(inValue):  
  return uniquelist[inValue]""".format(fc)

Tenga en cuenta que he cambiado, uniquelist = {} a uniquelist = dict() para garantizar la format no intente insertar en la {} aquí.

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