Erreur: variable locale référencée avant l'affectation dans ArcPy
J'ai un répertoire contenant d'autres sous-répertoire avec des fichiers de formes. J'accède aux fichiers de formes en utilisant un for, mais quand j'ai besoin d'utiliser la forme variable , je reçois ce message:
UnboundLocalError: variable locale 'shape' référencée avant l'affectation
def execute(self, parameters, messages):
"""The source code of the tool."""
fd= parameters[0].valueAsText
raster= parameters[1].valueAsText
out_CRS=arcpy.Describe (raster).spatialReference
out= "Z:\\EMSV-057_AOIs_Reshape\\5_Process\\1_TaskA\\ModelBuilder\\MB_pruebas.gdb"
#-------------------------
#leemos los shapes de la carpeta
for i in os.listdir(fd):
for entry in os.listdir(fd +"\\"+i):
if os.path.isfile(os.path.join(fd, entry)):
if entry.endswith(".shp"):
shape= fd +"\\"+i+"\\"+entry
# Cogemos datos alfanumericos del AOI y el CRS del raster
desc = arcpy.Describe(shape)
shape_CRS=arcpy.Project_management(shape, desc.path + "\\" + desc.baseName +
"_REprj.shp", out_CRS)
# Recortar-clip
clip=arcpy.Clip_management(raster, "#", out+"\\" +"clip", shape_CRS, "0",
"ClippingGeometry","MAINTAIN_EXTENT")
Réponses
Cela vous indique que la variable shapen'a pas été attribuée / créée lorsque vous essayez de l'utiliser. Donc, votre code n'atteindra probablement jamais cette ligne shape= fd +"\\"+i+"\\"+entry:, peut-être faire des chemins non valides ou que vous n'avez pas de fichiers de formes dans le répertoire.
Pour éviter que votre code ne casse, vous pouvez ajouter une instruction if pour vérifier si la variable existe: Comment vérifier si une variable existe? avant d'essayer de l'utiliser.
Essayez plutôt d'utiliser os.walk et combinez chemin + nom de fichier avec os.path.joins:
import os
fd = r'/home/bera/GIS/Data/'
filelist = []
for root,folder,files in os.walk(fd):
for file in files:
if os.path.isfile(os.path.join(root,file)) and file.lower().endswith('.shp'):
filelist.append(os.path.join(root,file))
for f in filelist:
print(f)
/home/bera/GIS/Data/testdata/lines.shp
/home/bera/GIS/Data/testdata/full_paths.shp
/home/bera/GIS/Data/testdata/a.shp
/home/bera/GIS/Data/testdata/overlaps2.shp
/home/bera/GIS/Data/testdata/grids/Second.shp
/home/bera/GIS/Data/testdata/grids/Firstfile.shp