Ich bin neu in der Python-Geodatenprogrammierung. Ich habe das folgende Skript ausgeführt und die entsprechende Fehlermeldung erhalten
>>> import osgeo
>>> import osgeo.ogr
>>> shapefile = osgeo.ogr.Open("tl_2009_us_state.shp")
>>> numLayers = shapefile.GetLayerCount()
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
numLayers = shapefile.GetLayerCount() AttributeError: 'NoneType' object has no attribute 'GetLayerCount'
tl_2009_us_state.shp
Datei.Antworten:
Im Grunde genommen bedeutet dies in Python, dass Ihr Versuch, das Shapefile zu öffnen, fehlgeschlagen ist. Wenn etwas wie osgeo.ogr.Open () fehlschlägt, wird normalerweise None zurückgegeben, was in Ihrem Fall Ihrer Variablen "Shapefile" zugewiesen wird. Wenn Sie später versuchen, auf Shapefile zuzugreifen, wird angezeigt, dass Shapefile "NoneType" ist (und nicht der Objekttyp, den osgeo erstellt hätte) und dass NoneType-Objekte nicht über die Methode GetLayerCount verfügen.
Wie beheben Sie das? Testen Sie zunächst Ihren Code auf Fehler, um bessere Nachrichten zu erhalten. Etwas wie:
Nun müssen wir die Frage beantworten, warum Ihr Shapefile nicht geladen wird. Ich vermute, dass Sie den vollständig qualifizierten Pfad angeben müssen (z. B. "C: \ Users ... \ tl_2009_us_state.shp"), da osgeo Ihr Shapefile mit dem aktuell angegebenen Pfad nicht finden kann. Das ist allerdings eine Vermutung.
quelle
Die Antwort von @ Nick ist richtig: "NoneType" bedeutet, dass die Datenquelle nicht geöffnet werden konnte. OGR (und GDAL) lösen keine Ausnahmen aus, wo sie normalerweise sollten, und
ogr.UseExceptions()
scheinen leider nichts Nützliches zu tun. Hier ist mein üblicher Codeblock, um tatsächlich die richtigen Ausnahmen auszulösen:quelle
Ich bin auf diesen Fehler schon einmal gestoßen und habe so lange daran festgehalten. Ich habe es mit einem anderen Shapefile zum Laufen gebracht. Das US Tiger Shapefile muss beschädigt worden sein oder so. Ich benutze hier gdal1.6.
quelle