Tengo una útil herramienta de script que recorre un espacio de trabajo y renombra y copia archivos de forma en un conjunto de datos de características. Sin embargo, si hay un archivo de forma dañado en algún lugar del espacio de trabajo, el script falla y detiene el procesamiento.
¿Cómo manejas errores como este? ¿Hay alguna manera de imprimir el archivo de error y continuar procesando el siguiente archivo de forma en el ciclo for hasta su finalización?
import arcpy
from arcpy import env
# Allow overwriting of output
env.overwriteOutput = True
# Parameters
env.workspace = arcpy.GetParameterAsText(0)
state = arcpy.GetParameterAsText(1)
gdb = arcpy.GetParameterAsText(2)
# Get a list of shapefiles in folder
fcs = arcpy.ListFeatureClasses()
# Find the total count of shapefiles in list
fcCount = len(fcs)
# Set the progressor
arcpy.SetProgressor("step", "Copying shapefiles to geodatabase...", 0,fcCount, 1)
# For each shapefile, copy to a file geodatabase
try:
for shp in fcs:
# Define name for the output points
fc = str(state + shp[0:9])
# Update the progressor label for current shapefile
arcpy.SetProgressorLabel("Loading " + shp + "...")
# Copy the data
arcpy.CopyFeatures_management(shp, str(gdb + "\\" + fc))
# Update the progressor position
arcpy.SetProgressorPosition()
except Exception as e:
print "An error has occurred"
print e
arcpy.ResetProgressor()
Como Stephen ya dijo, puede incluir la herramienta CopyFeatures en otro intento ... excepto Block.
Si la herramienta falla con un Shapefile específico, puede registrar el mensaje de la herramienta en alguna parte (siempre lo imprimo en STDOUT y canalizo las salidas a un archivo de registro cuando ejecuto el script).
Lo que tengo que agregar es: en el Bloque Excepto al lado de la Excepción, también debe imprimir los mensajes de error que produjo la Herramienta. No tiene acceso a los mensajes de la herramienta por la excepción (como debería ser seguro) sino desde el objeto arcpy llamando
Consulte http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//000v0000000m000000 cómo llamarlo y cómo obtener los últimos mensajes que posiblemente estén relacionados con el error específico de Shapefile.
Después de registrar esto, simplemente deja que el script continúe con los otros archivos de forma
fuente