Reacties
Antwoord
Uw arcpy.env.workspace pad – F:\raster_test – bestaat waarschijnlijk niet of arcpy heeft er geen toegang toe. De arcpy.ListRasters() retourneert een lege lijst [] als er geen rasters zijn gevonden, maar zal None retourneren als het pad niet wordt gevonden:
Pad bestaat wel:
arcpy.env.workspace = r"C:\Temp" # Does Exist rasters = arcpy.ListRasters("*.tif) print rasters
Zal uitvoeren:
[]
Pad doet niet bestaan:
arcpy.env.workspace = r"C:\Temp2" # Does NOT Exist rasters = arcpy.ListRasters("*.tif) print rasters
Zal uitvoeren:
None
Answer
… ook, een back-up dichter bij het begin van de code is deze foutieve regel (\ r is een escape-reeks in Python):
arcpy.env.workspace = "F:\raster_test" # Does NOT Exist
Op voorwaarde dat F: \ raster_test een geldig pad is (en rasters bevat), dan zou dit goed moeten werken:
arcpy.env.workspace = r"F:\raster_test" # Does Exist
Zie de sectie Python-doc over letterlijke tekenreeksen .
Opmerkingen
- +1 @Sujai Dit is een klassieke python gotcha (tenminste op Windows). " \ r " is de escape-reeks voor een regelterugloop. Een meer up-to-date (hoewel de daadwerkelijke escape-seqs ' t gewijzigd zijn) is docs.python.org/2/reference/ lexical_analysis.html # strings
- Je ' hebt gelijk, Luke …. link in antwoord bijgewerkt naar de nieuwere link. Veel andere goede dingen op die pagina.
Antwoord
Ik weet niet zeker wat de oorzaak is van uw NoneType fout, arcpy.ListRasters() retourneert een lege lijst en nooit een NoneType als er geen rasters waren gevonden. Geef dit een kans:
import arcpy import os from arcpy.sa import ExtractByMask out_dir = r"F:\clipped_images" arcpy.env.workspace = r"F:\raster\test" arcpy.CheckOutExtension("Spatial") mask = r"F:\shapefile\Export_Output.shp" for raster in arcpy.ListRasters("*.tif"): output_raster = os.path.join(out_dir, os.path.splitext(raster)[0] + "_clip.tif") ExtractByMask(raster, mask, output_raster) arcpy.CheckInExtension("Spatial")
Antwoord
Ik denk dat de verschillende List functies (ListTables, ListFeatureclasses, enz.) retourneren altijd None als er geen overeenkomende typen zijn in de opgegeven werkruimte. Voer een snelle if logische test uit voor uw lijstvariabele.
rasters = arcpy.ListRasters ("*.TIF") if rasters: your code here
.TIFFbestanden die moeten worden opgenomen, evenals.TIF