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
.TIFF
bestanden die moeten worden opgenomen, evenals.TIF