1 votos

¿Campo esperado no encontrado por ArcPy?

En la actualidad mi script patadas a cabo:

Error de tiempo de ejecución: No se ha encontrado un campo esperado o no se ha podido recuperar.

He hecho algunas comprobaciones y la ortografía de los campos es correcta y los campos existen en la capa de características. La línea de abajo es el error.

para mat, sId en sCur:

listFields = [f.name for f in arcpy.ListFields("Target_Services")] 
print listFields
for field in [srvMatFld, serviceID]:
    if field not in listFields:
        print field
with arcpy.da.SearchCursor ("Target_Services", [srvMatFld, serviceID]) as sCur:
    for mat, sId in sCur:

4voto

Gavin Schulz Puntos 592

Uno o ambos de sus campos en srvMatFld y serviceID no existen. Podría ser un error tipográfico en sus parámetros.

Aquí está mi script de prueba basado en tu código (sólo he añadido algunas sentencias print extra para que las cosas destaquen:

import arcpy 
print "######################################################"
xx = r"d:\gis\se\gisse.gdb\testpoint"
srvMatFld = 'intfield'
serviceID = 'dblfield'

listFields = [f.name for f in arcpy.ListFields(xx)] 
print listFields

print "######################################################"
for field in [srvMatFld, serviceID]:
    if field not in listFields:
        print field

print "######################################################"
with arcpy.da.SearchCursor(xx, [srvMatFld, serviceID]) as cursor:
    for x, y in cursor:
        print x, y

print "######################################################"
with arcpy.da.SearchCursor(xx, [srvMatFld, serviceID]) as cursor:
    for row in cursor:
        print row[0], row[1]

Y la salida:

######################################################
[u'OBJECTID', u'SHAPE', u'textfield', u'intfield', u'dblfield', u'datefield', u'SampleText', u'leisure', u'Greenspace', u'Name', u'Description', u'BigNumbers', u'TestVBA', u'MyDblField', u'MyIncrementField']
######################################################
######################################################
123 23.56
5454 -12234.2341
68465 None
5151 None
None None
######################################################
123 23.56
5454 -12234.2341
68465 None
5151 None
None None
>>> 

Sin embargo, si introduzco un error tipográfico en uno de mis dos nombres de campo (en este caso srvMatFld = 'intfieldx' ) entonces obtengo el error que usted encuentra:

######################################################
[u'OBJECTID', u'SHAPE', u'textfield', u'intfield', u'dblfield', u'datefield', u'SampleText', u'leisure', u'Greenspace', u'Name', u'Description', u'BigNumbers', u'TestVBA', u'MyDblField', u'MyIncrementField']
######################################################
intfieldx
######################################################
Traceback (most recent call last):
  File "D:\GIS\VSProjects\GISTest\GISSE\GISSE\xScratch.py", line 42, in <module>
    for x, y in cursor:
RuntimeError: A column was specified that does not exist.
>>> 

Observe el nombre incorrecto del campo intfieldx se especifica a partir del if field not in listFields: print field esta vez.

Su bucle de cursor es un poco ortodoxo - por lo general, el bucle a través de algo como for row in cursor: , pero si los campos existen, la forma en que lo has escrito debe todavía funcionan.

with arcpy.da.SearchCursor(xx, [srvMatFld, serviceID]) as cursor:
    for row in cursor:
        print row[0], row[1]

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