TypeError oplossen: NoneType-object is niet itereerbaar bij iteratie door rasters in een lijst die is samengesteld door arcpy.ListRasters ()? [gesloten]

Gesloten . Deze vraag heeft details of duidelijkheid nodig. Het accepteert momenteel geen antwoorden.

Reacties

  • Je hebt een * na tif, verwijder die.
  • Zorg ervoor dat de werkruimte (F: \ raster_test) echt bestaat. Als je deze code uitvoert in een directory die niet ' niet bestaat, krijg je ' de fout NoneType.
  • bewerk uw vraag om uw codefragment en uw foutmeldingen op te nemen als tekst en niet als afbeeldingen. Dit maakt je code en fouten doorzoekbaar, en maakt het ook gemakkelijker voor potentiële beantwoorders om je code te kopiëren / plakken voor hun eigen testen.
  • @Hornbydd Ik denk dat de extra * .TIFF bestanden die moeten worden opgenomen, evenals .TIF
  • @Hornbydd De extra * didn verwijderen ' t enig verschil maken.

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 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *