Die In-Memory-Schicht arcpy.MakeFeatureLayer ist weiterhin vorhanden, wenn der nachfolgende Schritt während des Tests fehlschlägt

9

Wenn ich arcgisscripting verwendet habe, um eine speicherinterne Ausgabeebene mit gp.makefeaturelayer zu erstellen, habe ich es in einen Try / Except-Block eingefügt und das gp-Objekt im Except-Teil gelöscht, wenn der Makefeaturelayer fehlschlagen würde. Wenn ich jetzt arcpy verwende, muss ich das Leerlauffenster schließen und erneut öffnen, damit die speicherinterne Ausgabeebene gelöscht wird.

Wie kann ich die Ausgabeebene meines Makefeaturelayer-Tools in einem Try / Except-Block löschen lassen? Vielen Dank.

Justin
quelle
Ein Feature-Layer ist eine einfache Darstellung einer Feature-Class. Gibt es einen bestimmten Grund, warum es gelöscht werden muss?
blah238
Wenn ich einen In-Memory-Feature-Layer erstelle und dann der nächste Schritt fehlschlägt. Ich nehme eine Anpassung vor und führe das Skript im Leerlauf erneut aus, aber dann ist bereits ein "Feature-Layer" vorhanden, sodass ich den Leerlauf schließen und neu starten muss braucht zusätzliche Zeit.
Justin
Make Feature Layer erstellt keine Daten, sondern nur eine Ansicht einiger vorhandener Daten. Vielleicht erstellen Sie stattdessen eine In-Memory-Feature-Class? In diesem Fall würde ich Dans Vorschlag verwenden, um die In-Memory-Feature-Class zu überschreiben. Es ist auch eine gute Idee, die In-Memory-Feature-Class zu löschen, wenn Sie sie nicht mehr benötigen, da sie bis zum Beenden der Anwendung weiterhin Speicher belegt.
blah238
Weitere Informationen zu einem Feature-Layer finden Sie in der Hilfe unter Arbeiten mit Ebenen und Tabellenansichten .
blah238

Antworten:

8

Einschließlich

arcpy.env.overwriteOutput = True

In Ihrem Skript werden alle vorherigen Versionen einer Datei überschrieben, ohne dass "schlechte" Versionen gelöscht werden müssen.

Andy
quelle
2
sollte seinarcpy.env.overwriteOutput = True
Josh Werts
7

Das Löschen des Feature-Layers im Ausnahmecode-Block funktioniert nicht. Wenn Sie sich im Block mit Ausnahmecode befinden, konnte der Feature-Layer nicht erstellt werden.

Ich empfehle, einen finally-Codeblock hinzuzufügen, der ausgeführt wird, unabhängig davon, ob der try-Block erfolgreich ist oder nicht. Wenn Sie dies tun, sollten Sie sicherstellen, dass der Feature-Layer vorhanden ist, bevor Sie ihn löschen können.

try:
    arcpy.MakeFeatureLayer_management(inFeatureClass, "outFeatureLayer", {whereClause})
except:
    print arcpy.GetMessages()
finally:
    if arcpy.Exists("outFeatureLayer"):
        arcpy.Delete_management("outFeatureLayer")
Roy
quelle