Odpowiedź
Twoja arcpy.env.workspace
ścieżka – F:\raster_test
– prawdopodobnie nie istnieje lub arcpy nie ma do niej dostępu. arcpy.ListRasters()
zwróci pustą listę []
, jeśli nie znaleziono rastrów, ale zwróci None
, jeśli ścieżka nie została znaleziona:
Ścieżka istnieje:
arcpy.env.workspace = r"C:\Temp" # Does Exist rasters = arcpy.ListRasters("*.tif) print rasters
Wyświetli:
[]
Ścieżka nie istnieją:
arcpy.env.workspace = r"C:\Temp2" # Does NOT Exist rasters = arcpy.ListRasters("*.tif) print rasters
Wyświetli:
None
Odpowiedź
… również, cofając się bliżej początku kodu, znajduje się ta błędna linia (\ r to sekwencja ucieczki w Pythonie):
arcpy.env.workspace = "F:\raster_test" # Does NOT Exist
Pod warunkiem, że F: \ raster_test jest prawidłową ścieżką (i zawiera rastry), to powinno działać poprawnie:
arcpy.env.workspace = r"F:\raster_test" # Does Exist
Zobacz sekcję Python doc dotyczącą literałów ciągów .
Komentarze
- +1 @Sujai To jest klasyczna gotcha Pythona (przynajmniej w systemie Windows). " \ r " to sekwencja zmiany znaczenia dla powrotu karetki. Bardziej aktualna (chociaż rzeczywiste sekwencje ucieczki nie są ' t zmienione) to docs.python.org/2/reference/ lexical_analysis.html # strings
- Masz ' masz rację, Luke …. link w odpowiedzi zaktualizowany do nowszego linku. Wiele innych dobrych rzeczy na tej stronie.
Odpowiedź
Nie jestem pewien, co powoduje NoneType
błąd, arcpy.ListRasters()
zwróciłby pustą listę i nigdy nie NoneType
gdyby nie było rastrów znalezione. Wypróbuj 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")
Odpowiedź
Uważam, że różne List
funkcje (ListTables
, ListFeatureclasses
itd.) zawsze zwracają None
jeśli w danym obszarze roboczym nie ma dopasowanych typów. Wykonaj szybki if
test logiczny dla zmiennej listy.
rasters = arcpy.ListRasters ("*.TIF") if rasters: your code here