Řešení TypeError: Objekt NoneType není iterovatelný při iteraci rastry v seznamu sestaveném pomocí arcpy.ListRasters ()? [uzavřeno]

Zavřeno . Tato otázka vyžaduje podrobnosti nebo jasnost . Momentálně nepřijímá odpovědi.

Komentáře

  • Máte * po TIF, odstraňte jej.
  • Zkontrolujte, zda pracovní prostor (F: \ raster_test) skutečně existuje. Pokud tento kód spustíte v adresáři, který ' neexistuje, ' dojde k chybě NoneType.
  • Upravte svoji otázku tak, aby obsahovala fragment kódu a chybové zprávy jako text , nikoli jako obrázky. Díky tomu lze váš kód a chyby prohledávat a také potenciálním odpovídačům usnadníte kopírování / vložení kódu pro vlastní testování
  • @Hornbydd Věřím, že extra * umožní .TIFF Soubory, které mají být zahrnuty, stejně jako .TIF
  • @Hornbydd Odstranění nadbytečného * did ' t změnit.

Odpověď

Vaše cesta arcpy.env.workspaceF:\raster_test – pravděpodobně neexistuje nebo k němu nemá arcpy přístup. arcpy.ListRasters() vrátí prázdný seznam [] pokud nejsou nalezeny žádné rastry, ale vrátí se None, pokud cesta nebyla nalezena:

Cesta neexistuje:

arcpy.env.workspace = r"C:\Temp" # Does Exist rasters = arcpy.ListRasters("*.tif) print rasters 

Bude výstup:

[] 

Cesta not existují:

arcpy.env.workspace = r"C:\Temp2" # Does NOT Exist rasters = arcpy.ListRasters("*.tif) print rasters 

Bude výstup:

None 

Odpověď

… také, tento záložní řádek je zálohován blíže k začátku kódu (v Pythonu je úniková sekvence):

arcpy.env.workspace = "F:\raster_test" # Does NOT Exist 

Pokud je F: \ raster_test platná cesta (a obsahuje rastry), pak by to mělo fungovat dobře:

arcpy.env.workspace = r"F:\raster_test" # Does Exist 

Viz část dokumentu Python o řetězcových literálech .

Komentáře

  • +1 @Sujai Toto je klasický python gotcha (alespoň v systému Windows). " \ r " je řídicí sekvence pro návrat vozíku. Aktuálnější (i když se skutečné únikové sekvence ' t nezměnily) je docs.python.org/2/reference/ lexical_analysis.html # strings
  • Máte ' pravdu, Luke …. odkaz v odpovědi aktualizován na novější odkaz. Spousta dalších dobrých věcí na této stránce.

Odpovědět

Nejsem si jistý, co je příčinou vašeho NoneType, arcpy.ListRasters() vrátí prázdný seznam a nikdy NoneType pokud by neexistovaly rastry nalezeno. Zkuste to:

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") 

Odpověď

Věřím, že různé List funkce (ListTables, ListFeatureclasses atd.) vždy vrátí None pokud v daném pracovním prostoru nejsou žádné odpovídající typy. Proveďte rychlý if logický test proměnné seznamu.

rasters = arcpy.ListRasters ("*.TIF") if rasters: your code here 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *